- matplotlib库
- 案例:生成一个折线图
- 画布与坐标系
- 子绘图区域
- 案例一:生成多个子图
- Matplotlib常用符号
- 显示网格
- 案例二:生成一个带网格线的折线图
- 显示图例
- 案例三:生成一个带图例的折线图
- 显示中文
- 中文显示方法(一)
- 中文显示方法(二)
- 显示负号
- 显示注释
- 显示标题
- 案例四:标题显示函数使用
- x轴和y轴注释
- 在指定位置放置注释
- 案例五:在指定位置添加箭头
- 其他设置
优秀数据可视化第三方库,可以绘制多种形式的图形1,依赖于numpy模块和tkinter模块(更多信息请访问:matplotlib官网)
案例:生成一个折线图import matplotlib.pyplot as plt
plt.plot([3,1,4,5,2])
plt.ylabel('num')
plt.savefig('test_1',dpi=600)
plt.show()
运行结果
在上面的例子中我们没有定义画布的语句,生成图形式使用默认画布,在程序中可以使用figure()函数创建一个自定义画布对象,语法格式:fig=plt.figure(num=None,figsize=None,dpi=None,facecolor=None,edgecolor=None,frameon=None)
参数
| 参数 | 描述 |
|---|---|
| num | 图像名称或索引号 |
| figsize | 画布的宽和高,单位英寸 |
| dpi | 绘图对象的分辨率 |
| facecolor | 背景颜色 |
| edgecolor | 边款颜色 |
| frameon | 是否显示边款 |
创建一个画布对象后,可以进一步控制图表的绘制,如添加子图,语法格式:fig.add_subplot(numrows,numcols,fignum),三个参数分别表示子图的行数、列数、索引号,如add_subplot(1,1,1)表示在一张画布中只设置一张子图
子绘图区域语法格式:plt.subplot(nrows,ncols,plot_number),三个参数分别为行数、列数、索引号2
案例一:生成多个子图#coding: utf-8 import numpy as np import matplotlib.pyplot as plt x = np.arange(1, 100) fig = plt.figure() ax1 = plt.subplot(221) ax1.plot(x, x) ax2 = plt.subplot(222) # 等同于fig.add_subplot(222) ax2.plot(x, -x) ax3 = plt.subplot(223) ax3.plot(x, x ** 2) ax4 = plt.subplot(224) ax4.plot(x, np.log(x)) # plt.subplots_adjust(wpace=None,hpace=None) 分别用于调整子图的左右间距和上下间距 plt.show()
运行结果
控制曲线格式的字符串有三种分别为:颜色字符,风格字符,标记字符
颜色字符
| 字符 | 描述 |
|---|---|
| ‘b’ | 蓝 |
| ‘g’ | 绿 |
| ‘r’ | 红 |
| ‘c’ | 青绿色 |
| ‘m’ | 洋红色 |
| ‘k’ | 黑 |
| ‘w’ | 白 |
| ‘#008000’ | RGB某颜色 |
格式字符
| 字符1 | 描述 | 字符2 | 描述 | 字符3 | 描述 |
|---|---|---|---|---|---|
| ‘.’ | 点 | ‘1’ | 下花三角 | ‘h’ | 竖六边形 |
| ‘,’ | 像素标记 | ‘2’ | 上花三角 | ‘H’ | 横六边形 |
| ‘+’ | 十字 | ‘3’ | 左花三角 | ‘x’ | 十字标记 |
| ‘|’ | 垂直线 | ‘4’ | 右花三角 | ‘d’ | 瘦菱形 |
| ‘^’ | 上三角 | ‘s’ | 实心方形 | ‘D’ | 菱形 |
| ‘>’ | 右三角 | ‘p’ | 实心五角 | ‘v’ | 倒三角 |
| ‘<’ | 左三角 | ‘o’ | 实心圈 | ‘*’ | 星型 |
风格字符串
| 字符串 | 描述 |
|---|---|
| ‘-’ | 实线 |
| ‘–’ | 破折线 |
| ‘-.’ | 点划线 |
| ‘:’ | 虚线 |
下面我们将这些字符组合使用
语法格式:grid(b=None,axis=None,color=None,linewidth=None,linestyle=None)
参数
| 参数 | 描述 |
|---|---|
| axis | 取值为(‘both’, ‘x’,‘y’),表示以哪个轴为刻度生成网格 |
| color | 表示网格线颜色, |
| linewidth | 表示网格线宽度 |
| linstyle | 网格线的显示类型 |
import matplotlib.pyplot as plt import numpy as np x=np.arange(0,21) plt.plot(x,x**2) plt.grid(True,linestyle='-.') plt.show()
运行结果
语法格式:legend(loc=None,ncol=None),其中loc表示图例显示的位置,ncol表示图例的列数
| loc参数 | 含义 | 英文参数 | loc参数 | 含义 | 英文参数 |
|---|---|---|---|---|---|
| 0 | 根据图形自适应,显示在最佳的位置 | best | 6 | 中部左边 | center left |
| 1 | 图像右上角 | upper right | 7 | 中部右边 | center right |
| 2 | 左上角 | upper left | 8 | 下部中心 | lower center |
| 3 | 左下角 | lower left | 9 | 上部中心 | upper center |
| 4 | 右下角 | lower right | 10 | 图形中心 | center |
| 5 | 图形右边 | right |
import matplotlib.pyplot as plt import numpy as np x=np.arange(1,11,1) plt.plot(x,x*2,label='double') plt.plot(x,x*3,label='triple') plt.plot(x,x*4,label='fourfold') plt.legend(loc=0,ncol=2) # 自适应,两列图例 plt.show()显示中文
pyplot并不默认支持中文,如果使用前未进行声明,程序会提出警告
使用rcParams修改字体
rcParams属性
| 属性 | 描述 |
|---|---|
| ‘font.family’ | 用于显示字体名称 |
| ‘font.style’ | 字体风格,"normal"正常,"italic"斜体 |
| ‘font.size’ | 字体大小,整数字号或’large’ |
font.family中文字体种类
| 字体 | 描述 |
|---|---|
| ‘SimHei’ | 黑体 |
| ‘Kaiti’ | 楷书 |
| ‘LiSu’ | 隶书 |
| ‘FangSong’ | 仿宋 |
| ‘STSong’ | 华文宋体 |
中文出现的地方添加属性:fontproperties
matplotlib并不默认支持显示负数,同样,我们使用rcParams属性修改使其显示
matplotlib.rcParams['axes.unicode_minus'] = False显示注释
图形中的注释常用于解释图形的含义
显示标题- 标题为普通文本时,直接使用title()函数设置,语法格式:titile(str),用于在坐标系上现实标题
- 标题为数学公式时,需要使用LaTex格式的文本来设置标题
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='SimHei'
x=np.arange(10,20)
plt.subplot(211)
plt.title('一次函数')
plt.plot(x,0.25*(x-2))
plt.subplot(212)
plt.title(r'$f(x)= frac{1}{4}(x-2)$')
plt.plot(x,0.25*(x-2))
plt.subplots_adjust(wspace =0, hspace =1)
plt.show()
运行结果
| 函数 | 描述 |
|---|---|
| xlabel(str) | x轴注释 |
| ylabel(str) | y轴注释 |
| 函数 | 描述 |
|---|---|
| text() | 在任意位置添加注释 |
| annotate() | 在任意位置添加带箭头的注释, |
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['axes.unicode_minus'] = False
a=np.arange(0,5,0.02)
plt.xlabel('时间',fontproperties='SimHei',fontsize=15)
plt.ylabel('振幅',fontproperties='Lisu',fontsize=15)
plt.title('标题',fontproperties='SimHei',fontsize=20)
# 文本注释
plt.subplot(211)
plt.plot(a,np.cos(a*np.pi*2),'g--')
plt.text(2,1,'y=1',bbox={'facecolor':'r','edgecolor':'y','boxstyle':'round'}) # bbox参数用于设置插入注释的参数
plt.axis([-1,6,-2,2]) # 用于设置xy轴的宽度
plt.grid(True) # 用于生成表格
# 箭头注释
plt.subplot(212)
plt.plot(a,np.cos(a*np.pi*2),'g--')
plt.annotate(r'y=1',xy=(2,1),xytext=(3,1.5),arrowprops=dict(facecolor='black',shrink=0.1,width=1)) # arrowprops参数用于设置箭头的样式
plt.axis([-1,6,-2,2])
plt.grid(True)
plt.show()
运行结果
xy轴范围设置
| 函数 | 描述 |
|---|---|
| axis[xmin,xmax,ymin,ymax] | 同时设置x,y轴的范围 |
| xlim(xmin,ymin) | 设置x轴范围 |
| ymin(ymin,ymax) | 设置y轴范围 |
xy轴刻度设置
| 函数 | 描述 |
|---|---|
| locator_params(axis,nbins=None) | axis表示x或y轴,nbins表示把坐标轴分为几份 |
日期刻度的显示
| 函数 | 描述 |
|---|---|
| autofmt_xdate() | 调整日期的排列根据图像大小自适应 |
将图像保存为图片
| 函数 | 描述 |
|---|---|
| savefig(path,dpi) | 将生成图形输出为文件,默认png,dpi设置图片的质量 |
计算机中通过程序绘制图形有两种方式:位图和矢量图,位图是一个个像素绘制的图形,矢量图是将多个点进行连接的图形,matploylib的绘图方式属于后者,也就是连接相邻的两个点形成一条曲线 ↩︎
subplot()函数的作用同add_subplot()函数,两者都生成若干个子图,区别是前者作用的对象是pyplot模块,后者作用的对象是画布对象figure ↩︎



