问题分析
1、首先我们去淘一个前辈们留下的公式,比如:
评价比较好看的是:
X = 15sin³(t)
Y = 13cos(t) - 5cos(2t) - 2cos(3t) - 1cos(4t)
其中,加粗参数可以修改,不同数字,不同的形状,有兴趣的可以试试。
2、有了公式我们就可以开始写代码了。要用到numpy、matplotlib两个库,前者提供numpy.linspace()函数,后者提供面板画图。
3、想要单独实现只有心形,没有matplotlib的边框和坐标系,我查了前辈们的资料,要对库里面的subplot.spine进行设置,即将上下左右的框的颜色都设置为none。而不显示坐标系则是将库里的xticks、yticks参数设置为空即可。
4、在心心上面写上汉字,这里我第一次直接写的是:
plt.title(“送给你一个小心心”)
出现的是乱码:
经过查阅资料,发现要引入字体的,比较好用的是直接让代码引入系统内的字体,并且可以无视ttf文件还是ttc文件,两个都可以用。
5、心心是要满的,光是框框不好看,于是这里就要用到库里的fill来做实心的效果。
6、边写边想到调整一下颜色会不会出现3D的效果呢,这个等我研究一下,如果你们有其他的好的想法,可以一起分享。
代码实现
import matplotlib.pyplot as plt
import numpy as np
# 设置matplotlib的汉字颜色
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\simsun.ttc")
# 心形图公式
t = np.linspace(-np.pi, np.pi, 256, endpoint=True)
X = 15 * (np.sin(t))**3
Y = 13 * np.cos(t) - 5 * np.cos(2 * t) - 2 * np.cos(3 * t) - np.cos(4 * t)
# 画图准备
plt.plot(X, Y, color='red',linewidth=1) #线条粗细可调节
plt.fill(X, Y, color='red')
plt.title("送给你一个小心心",fontproperties=my_font, fontsize=20)
# 将边界框设置为小透明
ax = plt.subplot(111)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_color('none')
ax.spines['left'].set_color('none')
# 将坐标系设置为小透明
plt.xlim(-20, 20) #设置x的显示区间
plt.xticks([])
plt.yticks([])
# 展示图像
plt.show()
运行结果如下: