天天看点

MatplotLib库的简单示例程序(plot、格式字符串设定、中文显示、文本显示函数、子绘图区域分割函数)

MatplotLib库是Python中最常用的第三方绘图库,他的API设计大部分模仿自matlab。因此matplotlib与matlab的使用十分相像。

以下程序段在各种环境下均可运行,但推荐在spyder下运行。

  • 一维、二维数据的绘图与保存
import matplotlib.pyplot as plt
plt.plot([3,2,1,4,5])
plt.ylabel("grade")
plt.savefig("test",dpi=200) # dpi(Dots Per Inch,每英寸点数,代表图形质量)
plt.show() # 在IPython环境下展示图像           

对于一维数据,默认列表值为纵坐标,而列表的索引为横坐标。绘图结果如下 

MatplotLib库的简单示例程序(plot、格式字符串设定、中文显示、文本显示函数、子绘图区域分割函数)

如果要在matlab中实现上述绘图,应写代码如下,可将两者进行对比。

a=[3,2,1,5,4];
plot(a);           

以下是一个二维数据绘图的小例:

import matplotlib.pyplot as plt
plt.plot([0,2,4,6,8],[3,2,1,4,5])
plt.ylabel("grade")
plt.axis([-1,10,0,6])
plt.savefig("test",dpi=200) # dpi(Dots Per Inch,每英寸点数,代表图形质量)
plt.show() # 在IPython环境下展示图像           
MatplotLib库的简单示例程序(plot、格式字符串设定、中文显示、文本显示函数、子绘图区域分割函数)
  •  绘图区域分割
import numpy as np
import matplotlib.pyplot as plt


def f(t):
    return np.exp(-t)*np.cos(2*np.pi*t)


a=np.arange(0,5,0.02)
b=f(a)
plt.subplot(2,1,1) # 也可以简写为plt.subplot(212)
plt.plot(a,b)
plt.subplot(2,1,2)
plt.plot(a,np.cos(2*np.pi*a),'r--')

plt.show()           
MatplotLib库的简单示例程序(plot、格式字符串设定、中文显示、文本显示函数、子绘图区域分割函数)
  • plot函数的format_string 

颜色字符

MatplotLib库的简单示例程序(plot、格式字符串设定、中文显示、文本显示函数、子绘图区域分割函数)

风格字符

MatplotLib库的简单示例程序(plot、格式字符串设定、中文显示、文本显示函数、子绘图区域分割函数)

标记字符 

MatplotLib库的简单示例程序(plot、格式字符串设定、中文显示、文本显示函数、子绘图区域分割函数)

format string 由颜色字符+风格字符+标记字符组合而成

在绘图时,为了区分不同的曲线,往往不仅需要不同的颜色,也需要不同的风格字符,这是因为在打印机上打印的时候线条往往是黑白的。下面是一个实例

import numpy as np
import matplotlib.pyplot as plt


a=np.arange(0,5,0.2)
plt.plot(a,a*1.5,'go-',a,a*2.5,'bx',a,a*3.5,'r-.')
plt.show()           
MatplotLib库的简单示例程序(plot、格式字符串设定、中文显示、文本显示函数、子绘图区域分割函数)
  • pyplot的中文显示

在pyplot绘图中,并不能直接显示中文,为了显示中文,需要使用一些额外的参数,请看如下程序段:

import numpy as np
import matplotlib.pyplot as plt


a=np.arange(0,5,0.2)
plt.plot(a,a*1.5,'go-',a,a*2.5,'go',a,a*3.5,'r-.')
plt.xlabel('横轴',fontproperties='SimHei',fontsize=20)
plt.show()           

在设置xlabel时,需要额外增加fontproperties='SimHei’这一参数,意思是使用黑体。python中的中文字体分别叫如下名称:

MatplotLib库的简单示例程序(plot、格式字符串设定、中文显示、文本显示函数、子绘图区域分割函数)
  • pyplot中的文本显示函数
MatplotLib库的简单示例程序(plot、格式字符串设定、中文显示、文本显示函数、子绘图区域分割函数)
import numpy as np
import matplotlib.pyplot as plt


a=np.arange(0,5,0.02)
plt.plot(a,np.cos(2*np.pi*a),'r-')
plt.xlabel('横轴',fontproperties='Kaiti',fontsize=20,color='red')
plt.ylabel('纵轴',fontproperties='Kaiti',fontsize=20)
plt.title('示例函数$y=cos(2\pi x)$',fontproperties='SimHei',fontsize=20)
plt.text(2,1,'$\Omega =2\pi $',fontsize=12)

plt.axis([-1,6,-2,2])
plt.grid(True) # t要大写
plt.show()           
MatplotLib库的简单示例程序(plot、格式字符串设定、中文显示、文本显示函数、子绘图区域分割函数)
  • 子绘图区域的分割 

利用subplot函数可以对绘图区域进行一些简单的分割,但是对于一些更复杂的情况则无能为力,例如如下区域分割,只利用subplot函数则难以完成:

MatplotLib库的简单示例程序(plot、格式字符串设定、中文显示、文本显示函数、子绘图区域分割函数)

此时可以以下函数进行区域分割

MatplotLib库的简单示例程序(plot、格式字符串设定、中文显示、文本显示函数、子绘图区域分割函数)
plt.subplot2grid((3,3),(1,0),colspan=1)           

 这段代码选中了图中的黄色区域。参数(3,3)表示把整个区域分成的基本方格;(1,0)表示选中第1行第0列的小方格,也就是黄框的左半部分;cospan=2表示列方向的长度扩展为2。

MatplotLib库的简单示例程序(plot、格式字符串设定、中文显示、文本显示函数、子绘图区域分割函数)