文章目录
一、Matplotlib基本介绍
-
Matplotlib是一个可视化绘图库。可以使用这个库轻松地完成线形图、直方图、条形图、误差图或散点图等操作,设置标签、图例、调整绘图大小等。是python中使用最广的绘图库。有很多库(如pandas,seaborn)的绘图功能都是基于matplotlib实现的。
-
pyplot 是Matplotlib的一个基于状态的接口,可以快速的 绘制图表,通常我们绘图只需要通过pyplot的接口就可以了。
-
在Jupyter notebook中进行交互式绘图,需要执行一下语句:
%matplotlib notebook
-
使用matplotlib时,使用的导入的语句
import matplotlib.pyplot as plt
from matplotlib import pyplot as plt
二、两种绘图方式区别(plt.*** 和ax.***)
利用matplotlib画图有两种方式,一个直接调用pyplot模型中的相应函数就可以完成绘图,称为过程式绘图;另一种可以在画布上显示多个图表,称为面向对象绘图,fig.subplots()无参数创建图表,默认创建一个图表。
先matplotlib架构上理解,可以理解为:
matplotlib架构上分为三层
底层:backend layer
中层:artist layer
最高层:scripting layer
在任意一层操作都能够实现画图的目的,而且画出来还都一样。但越底层的操作越细节话,越高层越易于人机交互。
plt. 对应的就是最高层 scripting layer。这就是为什么它简单上手,但要调细节就不灵了。
ax.plot 是在 artist layer 上操作。基本上可以实现任何细节的调试。
三、如何使用Matplotlib绘图
快速绘图的流程:从左往右
1、画布—绘画的画板
函数接口 | 函数作用 | 参数说明 |
---|---|---|
plt.figure() | 创建一个新的绘图窗口,设置画布大小。 | figsize:参数格式为(width,height),单位为inch。dpi参数:分辨率,指每inch像素数。默认dpi为100。例figsize=(18,6) |
fig.add_subplot(row,col,index) | 在新的绘图窗口上创建子图,子图相互独立 | 无显式参数,逗号可以省略,fig.add_subplot(2,2,2)与fig.add_subplot(222)都可以。 row:行,col:列,index:子图的位置 |
plt.show() | 显示当前figure图像 | |
plt.close() | 关闭当前figure窗口 |
过程式绘图
import matplotlib.pyplot as plt
plt.plot(x,y) #绘制拆线图
plt.show() #显示图形
说明:依次调用pyplot模块中的相应函数就可以完成绘图。
面向对象绘图
import matplotlib.pyplot as plt
fig=plt.figure(figsize=(18,6))
ax1=fig.add_subplot(2,2,1) # 创建2*2=4张图,ax1画在第一张图上
ax2=fig.add_subplot(2,2,2) # 创建2*2=4张图,ax2画在第二张图上
ax3=fig.add_subplot(2,2,3) # 创建2*2=4张图,ax3画在第三张图上
ax4=fig.add_subplot(2,2,4) # 创建2*2=4张图,ax4画在第四张图上
plt.show() # 显示画布
plt.close() # 关闭画布
说明:
1、先通过plt.figure()函数创建一张完整的画面,作为底层,之后的所有操作都在这张画布上完成。
2、再通过figure.add_subplot()函数创建子图,相当于在已创建的画布上再叠加子图,子画布间相互独立,这样就可以达到一次性完成多幅图片的效果。
3、创建多个子图,可通过循环最后一个参数达到效果。
fig=plt.figure(figsize=(18,6))
for i in range(1,5):
ax=fig.add_subplot(2,2,i)
plt.show()
plt.close()
4、在一张画布上创建子图的其他方法
#方法1
fig=plt.figure()
ax=fig.add_axes([left, bottom, width, height])
#方法2
fig,ax=plt.subplots(行数, 列数)
2、配置—更个性化的绘图
全局配置
过程式和面向对象式配图都适用
- 指定中文字体
函数接口 | 函数作用 | 参数说明 |
---|---|---|
matplotlib.font_manager.FontProperties() | 指定中文字体 | font_path:指定字体的路径。 |
# 指定中文字体样式、大小
import matplotlib.font_manager as mfm
# 请换成自己电脑的字体路径
font_path = r"c:\windows\Fonts\simsun.ttc"
prop = mfm.FontProperties(fname = font_path)
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.set_title('你好',fontproperties=prop,fontsize=20)
plt.show()
- 指定全局画图主题
函数接口 | 函数作用 | 参数说明 |
---|---|---|
plt.style.use() | 指定画图主题 | 无显式参数,style_name:设置主题名 |
- 常用主题:
- ’ggplot’
- ‘seaborn-bright’
- ‘seaborn-white’
- ‘seaborn-darkgrid’
- ‘season-deep’
# 查看所有主题
plt.style.available
# 指定全局画图主题为ggplot
plt.style.use('ggplot')
局部配置
面向对象绘图过程:ax代表子图变量
- 图表标题设置
函数接口 | 函数作用 | 参数说明 |
---|---|---|
ax.set_title() | 在当前图形中添加主题,可以指定标题的名称、位置、颜色、字体大小等参数。 | label:标题文字,fontsize:指定字体大小,color:指定字体颜色,loc可选值为{‘left’,‘center’,‘right’},默认值为’center’ |
ax.set_title(“sample”):设置图表标题。
ax.set_title(“title”, loc=‘left’):设置图表标题位置。
- 坐标轴设置
函数接口 | 函数作用 | 参数说明 |
---|---|---|
ax.set_xlabel() | 当前图形中添加x轴名称,可以指定标题的名称、位置、颜色、字体大小等参数。 | xlabel:标签文字,fontsize:指定字体大小 |
ax.set_ylabel() | 当前图形中添加y轴名称,可以指定标题的名称、位置、颜色、字体大小等参数。 | ylabel:标签文字,fontsize:指定字体大小 |
ax.set_xlim() | 设置当前图形中x轴的范围,只能确定一个数值区间,而无法使用字符串标识。 | left:指定最小值,right:指定最大值,可以使用tuple合并表示(left,right) |
ax.set_ylim() | 设置当前图形中y轴的范围,只能确定一个数值区间,而无法使用字符串标识。 | bottom:指定最小值,top:指定最大值,可以使用tuple合并表示(bottom,top) |
ax.set_xticks() | 指定x轴刻度的数目与取值。 | ticks:传入列表,每个元素代表一个刻度值。 |
ax.set_yticks() | 指定y轴刻度的数目与取值。 | ticks:传入列表,每个元素代表一个刻度值。 |
ax.set_xticklabels() | 设置x轴刻度的显示值。 | labels:每个刻度上显示的值,fontsize:指定字体大小 |
ax.set_yticklabels() | 设置y轴刻度的显示值。 | labels:每个刻度上显示的值,fontsize:指定字体大小 |
ax.hlines() | 设置水平线 | y:某个纵坐标,固定值。xmin:横坐标最小值。xmax:横坐标最大值。 |
ax.vlines() | 设置垂直线 | x:某个纵坐标,固定值。ymin:横坐标最小值。ymax:横坐标最大值。 |
ax2=ax1.twinx() | 子图ax1、ax2共享x轴 | 无 |
ax2=ax1.twiny() | 子图ax1、ax2共享y轴 | 无 |
设置坐标轴标签文本
ax.set_xlabel(‘X axis’)
ax.set_ylabel(‘Y axis’)
设置x,y轴坐标刻度显示范围
ax.set_xlim(-3.5,3.5)
ax.set_ylim(-1.5,1.5)
设置主刻度坐标
ax.set_xticks([-4,-2,0,2,4])
ax.set_yticks([-1,-0.5,0,0.5,1])
设置次刻度坐标
ax.set_xticks(np.arange(-4,4,0.5),minor=True)
ax.set_yticks(np.arange(-1.5,1.5,0.1),minor=True)
- 图例
函数接口 | 函数作用 | 参数说明 |
---|---|---|
ax.legend | 指定当前图形的图例,可以指定图例大小、位置、标签。 | labels:标签名。loc:图例的位置。bbox_to_anchor:指定图例的位置(横坐标,纵坐标)(横纵最大1.0,最小0.0)。prop:等同于fontproperties。fontsize:字体大小。 |
ax.legend(loc=‘upper right’):自定义图例位置。
- loc 可选择的参数
- ‘best’:自动选择最佳位置
- ‘upper left’:左上角
- ’upper right’:右上角
- ‘lower left’:左下角
- ‘lower right’:右下角
- ‘center left’:中左
- ‘center right’:中右
- ‘lower center’:中下
- ‘upper center’:中上
ax.legend(fontsize=‘samll’) 自定义图例文字大小。
ax.legend(fontsize=10)
-
fontsize 可选择的参数
- 相对大小(字符串)
‘xx-small’,‘x-small’,‘smal’:小于当前默认字体大小
‘medium’:中等
‘large’,‘x-large’,‘xx-large’:大于当前默认字体大小 - 绝对大小(数值)
fontsize=10:绝对字体大小,单位为点。
- 相对大小(字符串)
ax.legend(labelcolor=[‘r’,‘b’]):设置图例文本颜色。
ax.legend(mode=‘expand’):图例水平平铺。
- 保存图形
函数接口 | 函数作用 | 参数说明 |
---|---|---|
plt.savefig() | 保存图片 | fname:文件名;dpi:像素,单个数值即可。 |
plt.savefig(“sample.png”)
- 支持如下格式:
jpg, jpeg:jpg图
png:png图
svg, svgz:svg图
tif, tiff:tiff图
pgf:pgf位图
pdf, eps, ps:pdf或postscript文件
raw, rgba
面向对象画图的代码示例
#准备数据
import numpy as np
x=np.linspace(-np.pi,np.pi,100)
y=np.sin(x)
#导入matplotlib库pyplot模块
import matplotlib.pyplot as plt
#创建画布
fig=plt.figure()
#创建图表
ax=fig.subplots()
#绘制折线图,设置点线样式,设置线条名称
ax.plot(x,y,'+r--', label='line1',mec='b',ms=10) #点为蓝色+(大小为10),线为红色虚线
#设置坐标轴
ax.set_xlabel('X axis') #坐标轴文本标签
ax.set_ylabel('Y axis')
ax.set_xticks([-4,-2,0,2,4]) #主刻度
ax.set_xticks(np.arange(-4,4,0.5),minor=True) #次刻度
ax.set_yticks([-1,-0.5,0,0.5,1])
ax.set_yticks(np.arange(-1.5,1.5,0.1),minor=True)
ax.tick_params(axis='y',labelrotation=30) #y轴主刻度文字旋转30度
ax.set_xlim(-3.5,3.5) #设置显示刻度范围
ax.set_ylim