Matplotlib 是 Python 的绘图库,可以用来绘制各种静态,动态,交互式的图表。其是一个非常强大的 Python 画图工具,可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等。Matplotlib 通常与 NumPy 和 SciPy(Scientific Python)一起使用,是数据科学和机器学习工作者必不可少的工具。
这是一篇零基础Matplotlib使用教程,最好的学习方式是在实战中学习。

一、绘制基础知识
官方文档是最好的学习素材:
https://matplotlib.org/stable/tutorials/introductory/index.html
一些绘图基础知识:
- 画板figure,画纸Subplot画质,可多图绘画
- 坐标轴Axis,横轴叫x坐标轴xlabel,纵轴叫y坐标轴ylabel


二、安装与导入
可以通过conda安装,终端命令如下:
conda install matplotlib
通过import导入:
# 导入matplotlib的pyplot模块
import matplotlib.pyplot as plt
三、常用图形

基本的视觉元素有三种:点、线、柱状。
- 对于数值类型,用点来进行可视化。例如想要知道学生为某科课程花费的时间和考试成绩两者之间的关系,可以把每个学生的数据绘制一个点,绘制出散点图
scatter plot
,可以查看两者之间的相关性。 - 对于时间序列的,用线条来进行可视化。用线条将相关的数据点连接在一起,帮助我们观察随着时间的变化数据的变化趋势,这样的图叫做折线图
line plot
。 - 对于分类数据,需要查看数据是如何在各个类别之间分布的,可以使用柱状图
bar plot
。 - 用来表示第三个维度时,可以使用颜色。一般很难在二维平面上表示三维数据,这时可以使用颜色视觉元素。最典型是热图
heatmap
,通过用渐进颜色显示用户热衷的区域或所在地理区域的图。
四、对列表绘图的步骤

0、导入工具包
# 导入matplotlib的pyplot模块
import matplotlib.pyplot as plt
# mac操作系统加上下面这句,否则中文无法显示
# plt.rcParams['font.sans-serif']=['Heiti TC']
1、基础绘图
# 第1步:定义x和y坐标轴上的点
# x坐标轴上点的数值
x=[1,2,3,4]
# y坐标轴上点的数值
y=[1,4,9,16]
# 第2步:使用plot给制线条
# 第1个参数是x的坐标值
# 第2个参数是y的坐标值
plt.plot(x,y)
# 第3步:显示图形
plt.show()

2、绘图设置
'''
color:线条颜色,值r表示红色(red)
marker:点的形状,值o表示点为圆圈标记(circle marker)
linestyle:线条的形状,值dashed表示用虚线连接各点
'''
plt.plot(x, y, color='r',marker='o',linestyle='dashed')
# plt.plot(x, y, 'ro')
'''
axis:坐标轴范围
语法为axis[xmin, xmax, ymin, ymax],
也就是axis[x轴最小值, x轴最大值, y轴最小值, y轴最大值]
'''
plt.axis([0, 6, 0, 20])
plt.show()

3、在图片上添加文本
# 第1步:定义x和y坐标轴上的点
# x坐标轴上点的数值
x=[1, 2, 3, 4]
# y坐标轴上点的数值
y=[1, 4, 9, 16]
# 第2步:使用plot绘制线条
# 第1个参数是x的坐标值
# 第2个参数是y的坐标值
plt.plot(x,y)
# 添加文本 #x轴文本
plt.xlabel('x坐标轴')
# y轴文本
plt.ylabel('y坐标轴')
# 标题
plt.title('标题')
# 添加注释
# 参数名xy:箭头注释中箭头所在位置
# 参数名xytext:注释文本所在位置
# arrowprops在xy和xytext之间绘制箭头
# shrink表示注释点与注释文本之间的图标距离
plt.annotate('我是注释', xy=(2,5), xytext=(2, 10),
arrowprops=dict(facecolor='black', shrink=0.01))
#第3步:显示图形
plt.show()

五、绘制多个子图

如何使用Python创建多个画板和画纸来绘制多幅图,如果事先不声明画板画板,默认是创建一个画板一个画纸使用figure()方法创建画板1使用subplot()方法创建画纸,并选择当前画纸并绘图同样用subplot()方法选择画纸并绘图最后显示图形绘制多个图形。
subplot()方法里面传入的三个数字 前两个数字代表要生成几行几列的子图矩阵,第三个数字代表选中的子图位置。subplot(2,1,1)生成一个2行1列的子图矩阵,当前是第一个子图。
#创建画板1
fig = plt.figure(1) #如果不传入参数默认画板1
#第2步创建画纸,并选择画纸1
ax1=plt.subplot(2,1,1)
#在画纸1上绘图
plt.plot([1, 2, 3])
#选择画纸2
ax2=plt.subplot(2,1,2)
#在画纸2上绘图
plt.plot([4, 5, 6])
#显示图像
plt.show()

六、对数组的绘图

上面部分我们给图形传入的数据是list
类型,但是如果绘制图形只允许传入列表的话,绘制图形会变得很麻烦。所以,我们一般传入的是numpy的数组 numpy.ndarray
,实质上所有传入数据的类型在matplotlib内部处理时都会转化为numpy数组类型。
接下来看如何使用数组进行绘图,这里用一维数组来绘制多个折线图。
第一步,要导入numpy包,再用numpy的一维数组生成一个等差数组,用arange()方法。数组中的最小值为0,最大值为5,后一个数据比前一个大0.2。
# 多图绘制
# 导入包numpy
import numpy as np
# 定义一维数组
t = np.arange(0, 5, 0.2)
第二步,定义三个折线图的坐标值,分别用x1,x2,x3表示三个坐标轴上x轴的数值,用y1,y2,y3表示y轴上的数值,这些坐标值都是一维数组。
# 使用数组同时绘制多个线性
# 线条1
x1=y1=t
# 线条2
x2=x1
y2=t**2
# 线条3
x3=x1
y3=t**3
第三步,绘制出图形。
# 使用plot绘制线条
linesList=plt.plot(x1, y1,
x2, y2,
x3, y3 )
# 用setp方法可以同时设置多个线条的属性
plt.setp(linesList, color='r')
plt.show()
print('返回的数据类型',type(linesList))
print('数据大小:',len(linesList))
