Matplotlib和numpy库一样,都是python的第三方库,numpy库侧重于数据的统计,计算,分析,详细看这里;
Matplotlib库则侧重于图形的绘制,将数据可视化,支持许多种图像的绘制,具体看这里。Matplotlib库支持的功能太多,一般情况只使用其中的pyplot子库就已足够,具体使用方法如下:
import Matplotlib.pyplot as plt
初识MatPlotlib.pyplot
上初中时,学的最简单的图形是什么?没错,坐标系,学习pyplot,第一步先学会画一个平面坐标系,利用plot函数可以做到这一点
plt.plot(x,y,format_string,**kwargs)
其中:
- x,y:代表所绘制的数据的x,y轴,可以为列表或数组
- format_string:控制曲线的格式字符串(可以省略)
- kwargs:plot函数可以同时绘制多条曲线,只需在后面接上相同的参数(x,y,format_string)就行
format_string:可控制曲线的颜色,风格,标记字符,下图列出了常用的几个,不用记忆,需要的时候查一下表就行:
这里举一个plot的使用示例:
a=np.arrage(10)
plt.plot(a,a*1.5,'go-',a,a*2.5,'rx',a,a*3.5,'*',a,a*4.5,'b-.')
这条程序绘制出的图形如下:
使用技巧: 当绘制一条曲线时,可以省略x轴,图像将y轴数据(列表或数组)的下标当作x轴,
但是当绘制多条曲线时,不允许x轴的省略
加上注释
仅仅有图像是不够的,这个图象表示了什么,它的x,y轴代表什么含义?我们需要用注释来表明图像的意义,pyplot中提供了许多文本显示函数,常用的有以下几种:
那这些函数怎么用呢?前三者用法相同,这里举一个例子
a=np.arange(0,5,0.5)
plt.plot(a,a**2,'r--')
plt.xlabel('xlabel',fontsize=15,color='green')
plt.ylabel('ylabel',fontsize=15,color='yellow')
plt.title('title $y=coss(2\pi x)$',fontsize=25)
plt.text(2,1,r'$\mu=100$',fontsize=15)
plt.grid(True)
plt.show()
其中,由两个$包括起来的部分是Latex格式语句,这里不赘述;
text函数中,前两个参数分别表示文本的横纵坐标
除这些外,表中还提到了annotate函数,使用方法如下:
plt.annotate(s,xy=arrow_crd,xytexte=text_crd,arrowprops=dict)
这些参数中:
- arrow_crd:箭头的坐标
- text_crd:注释的坐标
- dict:表示一系列的属性
举个实例:
让它更好懂!-----来点中文
pyplot默认情况下,不支持中文的标注,这可让英文渣大为头疼,接下来我们学习:如何让它支持中文注释。
reParams
想让pyplot支持中文注释,需要用到rcParams这个函数,它可以指定中文的字体,字体风格(正常,斜体),以及字体大小,使用的示例如下:
import matplotlib
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['fontsize']=20
以上代码中,SimHei代表黑体,在写过这条代码后,就可以在x,y轴等地方添加中文的注释,常用的字体有如下几种:
此外,rcParams包含以下这些属性:
fontproperties
在以上的方法中,使用rcParams可以设置全局的字体,但如果只想改变某个部分的字体呢?这时就需要用到fontproperties属性。
举例:
a=np.arange(0.0,5.0,0.02)
plt.xlabel('这里是横轴',fontproperties='SimHei',fontsize=20)
ply.ylabel('这里是纵轴',fontperoerties='SimHei',fontsize=20)
plt.plot(a,a**2)
plt.show
漂亮的排版----多区域绘图
常常,我们会想在一张纸上画许多个互不关联的图像,这些图像有的占用了左半边,有时由占用了一整行,pyplot中也可以做到这种效果----subplot2grid()
subplot2grid函数,首先将画图的区域分成多个网格,利用对不同的网格选择,合并,便达到图中的效果,和Excel中的合并单元格是同样的原理。
例如:
plt.subplot2grid((3,3),(1,0),colspan=2,rowspan=2)
- 第一个参数:表示将绘图的区域分成3*3的网格(注意,网格下标从0开始)
- 第二个参数:选中第二行,第一列的网格
- 第三个参数:合并2个列
- 第四个参数:同上类推
达到以下的效果:
虽然这个函数能实现漂亮的排版,但使用起来有些麻烦,比如:已经有了plt.subplot2grid((3,3),(1,0),colspan=2,rowspan=2)这条语句,若想选中其他区域(如0,0),仍需要再写一遍plt.subplot2grid((3,3),(0,0)),为了简化这个麻烦,可以使用另一个函数----GridSpec()
GridSpec函数是位于MatPlotlib中GridSpec子库中的一个函数,它的使用原理同上,但在划分网格后,不需要每次重新划分,直接选
中便可使用,举例如下: