查看原文
其他

matplotlib绘制数学函数

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:钱梦璇

文字编辑:钱梦璇

技术总编:张   邯

导读



在以往的推文中,我们详细介绍了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范围为-55之间的100个点,y1为多项式函数,y2和y3分别为它的一阶和二阶导函数。

确定x轴范围为-55y轴范围为-2080,并设置坐标轴的名称:

#确定坐标轴范围 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-.'。

legend()表示了不同函数图像的文本标签图例,如果没有plt.legend(),label就不会显示。要想显示图形,必须加上plt.show()。图形如下所示:


Sigmoid激活函数

在机器学习中,我们会经常遇到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()
text的前两个参数为标注的位置,表示在(-6,0.8)位置处显示标注。图形如下所示:

这时,我们发现横纵坐标交叉点不是在原点(0,0)处,由于绘制的是数学函数,最好在直角坐标系下展示。那么可以使用gca函数(get current axis)将现在的坐标轴拿出来,再对其设置。
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)处,这样就设定为直角坐标系的格式。

最终绘制的函数图形如下所示:

以上两个matplotlib应用的小栗子,大家学会了嘛?赶快动手试试吧~






对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐

gen的再进化

Stata版大家来找茬—cfout就够了
另辟蹊径js逆向爬取百度翻译
可迭代对象、迭代器、生成器傻傻分不清楚
Ftools命令组之fegen命令介绍
提升效率的利器——如何用labvarch批量修改变量标签
二进制序列类型——bytes()、bytearray()
今日头条海外疫情数据爬取
anythingtodate带你轻松处理日期
_variables介绍
查询12306车次信息
海外疫情仍严峻,劝君更在家中留
国外疫情怎么看?——实时新闻获真知

基于贝叶斯定理的算法——朴素贝叶斯分类

中国知网爬虫(CNKI) 批量下载PDF格式论文
sencode命令介绍
Ftools命令组之fisid命令和fsort命令介绍

关于我们



微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存