六行Python代码绘制心形曲线详解

Mason
Mason
发布时间:2026-10-13 | 4人浏览过
原创

本文通过Python的Matplotlib库,详细解析如何用仅六行代码绘制经典的心形曲线。文章结合笛卡尔与克里斯汀的爱情故事,介绍了直角坐标系与极坐标系下心形线的数学表达,并展示了参数方程与极坐标方程在Python中的具体实现方法及可视化效果。

引言:Python在数据可视化中的优势

此前在进行绩效体系构建时,曾遇到一个尴尬的情况:竟然忘记了如何在Excel中拟合正态分布。尽管次日重新掌握了Excel中常用函数与图像绘制方法,仍深感惭愧。实际上,当时过于纠结细节而忽略了问题本质。解决数据分析与可视化问题,正是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代码如下:


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中读取相应数值,即可拟合正态分布。


心形线的传说:笛卡尔与克里斯汀的故事

回归主题,关于爱心线,流传着一个凄美的爱情故事。

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

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()

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


变体与扩展:忧伤心形与3D视图

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


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 相对简洁的实现。

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


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


总结:Python在数据洞见可视化中的价值

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

参考阅读

http://matplotlib.org/

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

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表