六行python代码的爱心曲线详解


Posted in Python onMay 17, 2019

前些日子在做绩效体系的时候,遇到了一件?迨拢?尤煌?窃跹??xcel上拟合正态分布了,尽管在第二天重新拾起了Excel中那几个常见的函数和图像的做法,还是十分的惭愧。实际上,当时有效偏颇了,忽略了问题的本质,解决数据分析和可视化问题,其实也是Python的拿手好戏。

例如,画出指定区间的一个多项式函数:

六行python代码的爱心曲线详解

Python 代码如下:

import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(-4, 4, 1024)
Y = .25 * (X + 4.) * (X + 1.) * (X - 2.)
plt.title('$f(x)=\\frac{1}{4}(x+4)(x+1)(x-2)$')
plt.plot(X, Y, c = 'g')
plt.show()

通过numpy的linspace方法来确定横坐标x的取值范围,列出方程,然后调用matplotlib的pyplot画出函数曲线即可。numpy 是一个用python实现的科学计算包,包括一个强大的N维数组对象Array和成熟的函数库,有用于整合C/C++和Fortran代码的工具包,提供了实用的线性代数、傅里叶变换和随机数生成函数等工具,可以理解成Matlab。

记得中学的时候,我问老师三角函数到底有啥用?(无知者无畏)老师反问我,“如果给了你一块洋铁,怎样才能剪出煤炉烟囱的拐弯呢?”,现在仍然记得老师的这个例子,哪些看似抽象的数学公式,实际上是自己不知道她们的应用场景而已。 

六行python代码的爱心曲线详解

Python代码如下:

import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(0, 2 * np.pi, 100)
YSinValues = np.sin(X)
YCosValues = np.cos(X)
plt.plot(X, YSinValues)
plt.plot(X, YCosValues)
plt.show()

Matplotlib 是一个 Python 的 2D绘图库,甚至可以生成出版质量级别的图形。

对于那些正态分布而言,Python 画起来也就相当简单了:

import numpy as np
import matplotlib.pyplot as plt
def pdf(X, mu, sigma):
    a = 1. / (sigma * np.sqrt(2. * np.pi))
    b = -1. / (2. * sigma ** 2)
    return a * np.exp(b * (X - mu) ** 2)
X = np.linspace(-6, 6, 1000)
for i in range(3):
    samples = np.random.standard_normal(10)
    mu, sigma = np.mean(samples), np.std(samples)
    plt.plot(X, pdf(X, mu, sigma), color = '.66')
plt.plot(X, pdf(X, 0., 1.), color = 'b')
plt.show()

为了不显得单调,这里多画了几条曲线。只要算出方差和均值,从excel中读出哪些数值就可以拟合正态分布了。

六行python代码的爱心曲线详解

回归到主题,关于爱心线,有这样一个凄美的爱情故事。

迩来流浪于吴越,一片闲云空皎洁。

300多年前,斯德哥尔摩的街头,落魄的笛卡尔过着乞讨的生活,全部的财产破破烂烂的衣服和随身所带的几本数学书籍。清高的笛卡尔没有开口请求路人施舍,只是默默地低头在纸上写写画画,潜心于他的数学世界。 一个宁静的午后,笛卡尔照例坐在街头的阳光中研究数学问题,身边过往的人群,喧闹的车马队伍,都无法对他造成干扰。

有美一人,婉如清扬。邂逅相遇,与子偕臧。 

“你在干什么呢?”扭过头,笛卡尔看到一张年轻秀丽的睑庞,一双清澈的眼睛如湛蓝的湖水,楚楚动人,她就是瑞典的小公主,国王最宠爱的女儿克里斯汀。 她蹲下身,拿过笛卡尔的数学书和草稿纸,和他交谈起来。言谈中,他发现,这个小女孩思维敏捷,对数学有着浓厚的兴趣。 

几天后,笛卡尔意外地接到通知,国王聘请他做小公主的数学老师。满心疑惑的笛卡尔跟随侍卫一起来到皇宫,他听到了从远处传来的银铃般的笑声。他看到了那天在街头偶遇的女孩子,从此,他当上了公主的数学老师。

情不知所起,一往而深

公主的数学在笛卡尔的悉心指导下突飞猛进,他们之间也开始变得亲密起来。笛卡尔向她介绍了直角坐标系,代数与几何可以结合起来,也就是日后笛卡尔创立的解析几何学雏形。 在笛卡尔的带领下,克里斯汀走进了奇妙的坐标世界,她对曲线着了迷。每天的形影不离也使他们彼此产生了爱慕之心。

在瑞典这个浪漫的国度里,一段纯粹而美好的爱情悄然萌发。

念去去,千里烟波,暮霭沉沉楚天阔。

他们的恋情传到了国王的耳中,国王大怒,下令将笛卡尔处死。在克里斯汀的苦苦哀求下,国王将他放逐回国,公主被软禁在宫中。

当时,欧洲大陆正在流行黑死病。笛卡尔回到法国后不久,便染上重病。在生命进入倒计时的那段日子,他日夜思念的还是街头偶遇的那张温暖笑脸。他每天坚持给她写信,盼望着她的回音。然而,这些信都被国王拦截下来,公主一直没有收到他的任何消息。

欲知心里事,看取腹中书. 

在笛卡尔给克里斯汀寄出第十三封信后,他永远地离开了这个世界。此时,被软禁在宫中的小公主依然徘徊在皇宫的走廊里,思念着远方的情人。    
这最后一封信上没有写一句话,只有一个方程:r=a(1-sinθ)。

国王以为这个方程里隐藏着两个人的秘密,便把全城的数学家召集到皇宫,但是没有人能解开这个函数式。他不忍看着心爱的女儿每天闷闷不乐,便把这封信给了她。拿到信的克里斯汀欣喜若狂,她立即明白了恋人的意图,找来纸和笔,把图形画了出来,一颗心形图案出现在眼前,克里斯汀泪流满面,这条曲线就是著名的“心形线”。

国王去世后,克里斯汀继承王位,便立刻派人去法国寻找心上人的下落,收到的却是笛卡尔去世的消息,留下了一个永远的遗憾……

这封享誉世界的另类情书,据说至今还保存在欧洲笛卡尔的纪念馆里。

这个故事的出处无从知道,网络上流传着各种各样的版本,甚至在百度百科也有着这个故事。后来,有人考证了真实性,认为这是一个美丽的谎言,但并不妨碍人们对爱心线喜爱。

在直角坐标系中,爱心线的方程的python 表达为:x** 2+ y** 2 + a * x= a * sqrt(x** 2+y** 2) 和 x** 2+ y** 2 - a * x= a * sqrt(x** 2+y** 2)通过x 来求对应的y值很麻烦,就像软件设计中的“万能层”那样,可以采用参数方程来表示:

x=a*(2*cos(t)-cos(2*t))
y=a*(2*sin(t)-sin(2*t))

具体的python代码如下:

import numpy as np
import matplotlib.pyplot as plt
a = 1
t = np.linspace(0 , 2 * np.pi, 1024)
X = a*(2*np.cos(t)-np.cos(2*t))
Y = a*(2*np.sin(t)-np.sin(2*t))
plt.plot(Y, X,color='r')
plt.show()

代表爱心的心形线来了:

六行python代码的爱心曲线详解

但这不是六行代码呀?也不是r=a(1-sinθ)呀? 的确如此,那是极坐标系,python 的matplotlib同样支持极坐标系的,爱心线的六行pyton代码如下:

import numpy as np
import matplotlib.pyplot as plt
T = np.linspace(0 , 2 * np.pi, 1024)
plt.axes(polar = True)
plt.plot(T, 1. - np.sin(T),color="r")
plt.show()

这样,得到的就是封面中的图像了:

六行python代码的爱心曲线详解

心形线确实是爱心满满,如果融入了忧伤会是怎样呢?

import numpy as np
import matplotlib.pyplot as plt
 
x = np.linspace(-8 , 8, 1024)
y1 = 0.618*np.abs(x) - 0.8* np.sqrt(64-x**2)
y2 = 0.618*np.abs(x) + 0.8* np.sqrt(64-x**2) 
plt.plot(x, y1, color = 'r')
plt.plot(x, y2, color = 'r')
plt.show()

这样就得到了另一个爱心线: 

六行python代码的爱心曲线详解

网络上还有关于爱心线的各种漂亮实现,也充满了各种各样的情绪,但对于每一种,基本上都可以用python 相对简洁的实现。

实际上,绘图很简单,难的是那些曲线方程的表达以及实际的应用场景需求,比如螺旋线。

六行python代码的爱心曲线详解

进一步,还可以画出各种的3维视图,例如: 

六行python代码的爱心曲线详解

作为数据分析乃至大数据处理的最后一个环节,就是所谓洞见的可视化,python 可以说是其中的一个简单实用的工具。

参考阅读

http://matplotlib.org/

以上所述是小编给大家介绍的六行python代码的爱心曲线详解详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python获取脚本所在目录的正确方法
Apr 15 Python
Python中实现两个字典(dict)合并的方法
Sep 23 Python
Python for循环中的陷阱详解
Jul 13 Python
tensorflow实现简单逻辑回归
Sep 07 Python
Python实现字符串匹配的KMP算法
Apr 04 Python
很酷的python表白工具 你喜欢我吗
Apr 11 Python
Python生成指定数量的优惠码实操内容
Jun 18 Python
Python FFT合成波形的实例
Dec 04 Python
python使用matplotlib绘制折线图的示例代码
Sep 22 Python
python 三边测量定位的实现代码
Apr 22 Python
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
Jun 07 Python
Python音乐爬虫完美绕过反爬
Aug 30 Python
python使用pygame模块实现坦克大战游戏
Mar 25 #Python
Django如何开发简单的查询接口详解
May 17 #Python
详解python函数的闭包问题(内部函数与外部函数详述)
May 17 #Python
学习python分支结构
May 17 #Python
python pygame实现方向键控制小球
May 17 #Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
May 16 #Python
Python实现Linux监控的方法
May 16 #Python
You might like
一个基于PDO的数据库操作类
2011/03/24 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
浅析Yii2 gridview实现批量删除教程
2016/04/22 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
innerHTML,outerHTML,innerTEXT三者之间的区别
2007/01/28 Javascript
createElement动态创建HTML对象脚本代码
2008/11/24 Javascript
基于prototype扩展的JavaScript常用函数库
2010/11/30 Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
2012/08/14 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
js导出table到excel同时兼容FF和IE示例
2013/09/03 Javascript
jquery插件splitScren实现页面分屏切换模板特效
2015/06/16 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
vue.js选中动态绑定的radio的指定项
2017/06/02 Javascript
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
2018/08/28 Javascript
详解Angular模板引用变量及其作用域
2018/11/23 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
python定时执行指定函数的方法
2015/05/27 Python
Python中collections模块的基本使用教程
2018/12/07 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
pyqt5 QProgressBar清空进度条的实例
2019/06/21 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
Python turtle绘画象棋棋盘
2019/08/21 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
浅谈Django2.0 加xadmin踩的坑
2019/11/15 Python
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
.NET面试10题
2014/02/24 面试题
什么是动态端口(Dynamic Ports)?动态端口的范围是多少?
2014/12/12 面试题
应届生护士求职信
2013/11/01 职场文书
教育英语专业毕业生的求职信
2014/03/13 职场文书
简单租房协议书
2014/10/21 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js