matplotlib绘制数学函数
本文作者:钱梦璇
文字编辑:钱梦璇
导读
在以往的推文中,我们详细介绍了pyecharts库的画图方法,本篇采用的matplotlib是Python的另一个功能强大的绘图库,它可以呈现出2D的数据形式,还可以做成动画,只需要几行代码就可以生成各式各样的图形,对新手而言可谓十分友好。本文主要通过绘制数学函数,从而学习matplotlib图形的坐标轴、图例、画布等各个选项的设置。
多项式函数及其导数
导入matplotlib绘图库,一般情况下,不用import整个matplotlib模块,只需要调用pyplot模块。一般matplotlib要和numpy结合一起使用,因为数据需要用numpy来添加:
import matplotlib.pyplot as plt
import numpy as np
设定函数参数x的范围和x、y的方程式:
x=np.linspace(-5,5,100)
y1=2*x**3+6*x**2+3*x+8
y2=6*x**2+12*x+3
y3=12*x+12
其中,numpy的linspace方法指的是在指定的间隔内,返回均匀间隔的数字。在此设置的x范围为-5到5之间的100个点,y1为多项式函数,y2和y3分别为它的一阶和二阶导函数。
确定x轴范围为-5到5,y轴范围为-20到80,并设置坐标轴的名称:
#确定坐标轴范围
plt.xlim((-5,5))
plt.ylim((-20,80))
#设置x y轴的名称
plt.xlabel('i am x')
plt.ylabel('i am y')
接下来开始画图,plot为绘制图像的函数:
plt.plot(x,y1,color='r',linewidth=1.5,label='y')
plt.plot(x,y2,'b',linewidth=1.3,label="y'",linestyle='--')
plt.plot(x,y3,'g-.',linewidth=1.0,label="y''")
plt.legend() #用legend()表示不同图像的文本标签图例
plt.show()
三个plot函数对应了三个函数图像,其中color设置了每个函数图像的颜色,linewidth设置了线的宽度,label为标记,linestyle设置线的显示形式。从每个plot函数的设定中可以看出,color和linestyle可以省去,同时(color='r'和linestyle='-.')可以简写为color='r-.'。
在机器学习中,我们会经常遇到Sigmoid激活函数,通过绘制此函数图形更深刻地了解它。
import numpy as np
import matplotlib.pyplot as plt
# 正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False
如果需要在图形中加入中文标签,并在图形中标记Sigmoid的函数形式,一般通过以上固定形式设置来正常显示中文标签和负号。
与上例相同,确定参数x的范围和函数方程:
x=np.linspace(-6,6,100)
#数组的除法运算
y=np.divide(1,(1+np.exp(-x)))
plt.plot(x,y,label='Sigmoid激活函数')
其中,np.divide()表示对数组进行除法运算,即1除以1+np.exp(-x)。添加的标记“Sigmoid激活函数”中含有中文,所以要通过上述设置显示中文,且字体为“SimHei”。
用text函数设置标注,其中,数学公式必须用markdown格式编辑:
plt.text(-6,0.8,r'$\sigma=\frac{1}{1+e^{-x}}$')
#在图形中显示标记
plt.legend()
plt.show()
ax = plt.gca()
ax.spines['right'].set_color("none")
ax.spines['top'].set_color("none")
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(("data",0))
ax.spines['left'].set_position(("data",0))
其中,ax.spines的四个参数“right”,“top”,“bottom”和“left”分别表示图形四个位置的边框,将右边和上边的边框颜色设置为None,即不显示右边和上边的边框。
ax.xaxis.set_ticks_position('bottom')和ax.yaxis.set_ticks_position('left')分别表示将x轴设置在上图边框的底部的线处,将y轴设置在上图边框的左边的线处。然后将左边和底部的线交点(即x和y轴交点)设定在原点(0,0)处,这样就设定为直角坐标系的格式。
最终绘制的函数图形如下所示:
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。