Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。在这里我将介绍一下它的相关知识,你可以在这里快速学会如何用它画出好看的数据图像,如果你想学习到更多的知识,建议你可以在下面的介绍中找到官网学习。
目录
内容导论
Matplotlib库介绍
pyplot的plot()函数
pyplot的中文显示
pyplot的文本显示
pyplot的子绘图区域
本单元总结
Matplotlib库介绍
Matplotlib是python的优秀的数据可视化第三方库。你可以通过这里进入Matplotlib documentation — Matplotlib 3.6.0 documentation,它的下载方式已在此图中显示。Matplotlib库是由各种可视化类构成,内部结构复杂,受Matlab启发 matplotlib.pyplot是绘制各类可视化图形的命令子库,相当于快捷方式。
效果图展示
在它的示例库中,我们可以看到有许许多多漂亮的表格。
Matplotlib的小小展示
import matplotlib.pyplot as plt
plt.plot([1,2,3,4,5],[3,5,4,1,2])
plt.ylabel("People")
plt.axis([-1,6,0,6])
plt.show()
图像展示
plt.plot(x,y)当有两个以上参数时,按照X轴和Y轴顺序绘制数据点
绘图区域
plt.subplot(nrows, ncols, plot_number),如果我们想要几个图都在一个框内显示,就需要使用这个函数。它会在全局绘图区域中创建一个分区体系,并定位到一个子绘图区域。
比如plt.subplot(3,2,4),形成三个横轴,两个纵轴,子区域4:
代码的实现
import numpy as np
import matplotlib.pyplot as plt
def H(t):
return np.exp(-t)*np.cos(2*np.pi*t)
a = np.arange(0.0,10,0.02)
plt.subplot(2,1,1)
plt.plot(a,H(a))
plt.subplot(212)
plt.plot(a,np.sin(2*np.pi*a),'r--')
plt.show()
由上代码,我们可以得到这样一个衰减曲线与sin函数。
pyplot的plot()函数
plt.plot(x, y, format_string, **kwargs)
x : X轴数据,列表或数组,可选
y : Y轴数据,列表或数组
format_string: 控制曲线的格式字符串,可选
**kwargs : 第二组或更多(x,y,format_string)
当绘制多条曲线时,各条曲线的x不能省略
import numpy as np
import matplotlib.pyplot as plt
a = np.arange(10)
plt.plot(a,a*1.5,a,a*2.5,a,a*3.5,a,a*4.5)
plt.show()
format_string
控制曲线的格式字符串,可选,由颜色字符、风格字符和标记字符组成
**kwargs
第二组或更多的(x,y,format_string)
color : 控制颜色, color='green'
linestyle : 线条风格, linestyle='dashed'
marker : 标记风格, marker='o'
markerfacecolor : 标记颜色, markerfacecolor='blue'
markersize : 标记尺寸, markersize=20
……
pyplot的中文显示
方法一
pyplot并不默认支持中文显示,需要rcParams修改字体实现
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='SimHei'
plt.plot([3,1,4,5,2])
plt.ylabel("纵轴(值)")
plt.savefig('test',dpi=600) #dpi分辨率,每英寸的点数
plt.show()
看图,坐标的右侧有了中文显示:
rcParams的属性
中文字体的种类
rcParams['font.family']
实例
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='STSong'
matplotlib.rcParams['font.size']=20
a = np.arange(0.0,5.0,0.02)
plt.xlabel("横轴:时间")
plt.ylabel("纵轴:振幅")
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.show()
效果图
方法二
在有中文输出的地方,增加一个属性:fontproperties
实例
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
a = np.arange(0.0,5.0,0.02)
plt.xlabel("横轴:时间", fontproperties="SimHei",fontsize=20)
plt.ylabel("纵轴:振幅", fontproperties="SimHei",fontsize=20)
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.show()
效果图
pyplot的文本显示
pyplot的文本显示函数
实例1
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
a = np.arange(0.0,5.0,0.02)
plt.xlabel("横轴:时间", fontproperties="SimHei",fontsize=15,color='green')
plt.ylabel("纵轴:振幅", fontproperties="SimHei",fontsize=15)
plt.title(r'正弦波实例 $y=cos(2\pi x)$',fontproperties='SimHei',fontsize=25)
plt.text(2,1,r'$\mu=100$',fontsize=15)
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.axis([-1,6,-2,2])
plt.grid(True)
plt.show()
效果图1
plt.annotate(s, xy=arrow_crd, xytext=text_crd, arrowprops=dict),我们将会用此函数打上箭头。
实例2
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
a = np.arange(0.0,5.0,0.02)
plt.xlabel("横轴:时间", fontproperties="SimHei",fontsize=15,color='green')
plt.ylabel("纵轴:振幅", fontproperties="SimHei",fontsize=15)
plt.title(r'正弦波实例 $y=cos(2\pi x)$',fontproperties='SimHei',fontsize=25)
plt.annotate(r'$\mu=100$', xy=(2,1), xytext=(3,1.5),
arrowprops=dict(facecolor='black',shrink=0.1,width=2))
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.axis([-1,6,-2,2])
plt.grid(True)
plt.show()
效果图2
pyplot的子绘图区域
复杂的绘图区域
plt.subplot2grid()
plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1)
设定网格,选中网格,确定选中行列区域数量,编号从0开始,比如:
plt.subplot2grid((3,3), (1,0), colspan=2)
大家可以根据下面的代码与图相对应
plt.subplot2grid((3,3),(0,0),colspan=3)
plt.subplot2grid((3,3),(1,0),colspan=2)
plt.subplot2grid((3,3),(1,2),rowspan=2)
plt.subplot2grid((3,3),(2,0))
plt.subplot2grid((3,3),(2,1))
GridSpec类
它是Matplotlib库中一个特殊的子区域选定和设计的类
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
gs=gridspec.GridSpec(3,3) #设计三行三列的网格
ax1=plt.subplot(gs[0,:]) #横向上选中第0列,纵向上全选
ax2=plt.subplot(gs[1,:-1])
ax3=plt.subplot(gs[1:,-1])
ax4=plt.subplot(gs[2,0])
ax5=plt.subplot(gs[2,1])
它的设计同上网格是一样的。
本单元总结
按照我的计划,是将数据分析的入门做八个单元,现在完成了一半了,后面我会不定期的更新数据分析的实战项目,从做项目中又能巩固我的知识,目前我正在看李航的《统计学习方法》,反正也是慢慢学,我准备后面还是找找网课看看。其次呢,我还打算把之前学的不是很清楚的爬虫专栏做起来。但主体的这一学期是准备学习机器学习的理论知识、备考英语四级、学习C++准备参加竞赛。
好了,总结完毕!虽然每次章末总结,我却比一定会总结,但说实话,我是为了我自己学习而写的博客,如果能得到大家的认可,我也很高兴!希望你们不要嫌我话多。
OK!如果你是从第一单元看过来的,祝你有所收获;否则,我会在下一单元中看见你。