1. 核心原理
使用matplotlib
绘图的原理,主要就是理解figure
(画布)、axes
(坐标系)、axis
(坐标轴)三者之间的关系。
下面这幅图更详细:
以“美院学生张三写生画画”为例,来说明这三者之间的关系。
首先,张三想要画画,是不是需要在画板上面准备一张画布。对比到matplotlib
中,就相当于初始化了一张figure
(画布),我们画的任何图形,都是在这张figure
(画布)上操作的。
接着,张三需要给figure
(画布)分配不同的区域,指定哪一块儿究竟该画什么。对比到matplotlib
中,就是需要指定axes
(坐标系),每一个axes
(坐标系)相当于一张画布上的一块区域。一张画布上,可以分配不同区域,也就是说,一张画布,可以指定多个axes
(坐标系)。
最后,张三就是在分配好的不同区域上进行图形绘制了,在一张画布上,画的最多的应该就是2 D图,也可以画3 D图,如图所示,张三在区域一画了一个小狗,在区域二画了一个小猫,在区域三画了一个光头强。对比到matplotlib
中,我们在axes1
中画了一个条形图,在axes2
中画了一个饼图,在axes3
中画了一个折线图。当是2 D图时,都会有一个X轴和一个Y轴;当是3 D图时,都会有一个X轴、一个Y轴和一个Z轴,这个轴就是我们所说的“坐标轴axis”。
matplotlib绘图
一个
figure
(画布)上,可以有多个区域axes
(坐标系),我们在每个坐标系上绘图,也就是说每个axes
(坐标系)中,都有一个axis
(坐标轴)。
特别注意:在
matplotlib
中,figure
画布和axes
坐标轴并不能显示的看见,我们能够看到的就是一个axis
坐标轴的各种图形。
2. 基本使用
2.1 创建figure(画布)的两种方式
2.1.1 隐式创建figure对象
当第一次执行plt.xxx()
画图代码时,系统会去判断是否已经有了figure
对象,如果没有,系统会自动创建一个figure
对象,并且在这个figure
之上,自动创建一个axes
坐标系。
【注意】默认创建一个
figure
对象,一个axes
坐标系也就是说,如果我们不设置
figure
对象,那么一个figure
对象上,只能有一个axes
坐标系,即我们只能绘制一个图形。
隐式创建figure
对象存在的问题
-
优势:如果只是绘制一个小图形,那么直接使用
plt.xxx()
的方式,会自动帮我们创建一个figure
对象和一个axes
坐标系,这个图形最终就是绘制在这个axes
坐标系之上的。 -
劣势:如果我们想要在一个
figure
对象上,绘制多个图形,那么我们就必须拿到每个个axes
对象,然后调用每个位置上的axes
对象,就可以在每个对应位置的坐标系上,进行绘图,如下图所示。注意:如果figure
对象是被默认创建的,那么我们根本拿不到axes
对象。因此,需要我们显示创建figure
对象。
2.1.2 显示创建figure对象
以后的文章会详细讲述布局设置
# 手动创建一个figure对象
figure = plt.figure()
# 获取每个位置的axes对象
axes1 = figure.add_subplot(2,1,1)
axes2 = figure.add_subplot(2,1,2)
如图所示:
【Example】
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('Qt5Agg')
figure = plt.figure()
axes1 = figure.add_subplot(2,1,1)
axes2 = figure.add_subplot(2,1,2)
axes1.plot([1,3,5,7],[4,9,6,8])
axes2.plot([1,2,4,5],[8,4,6,2])
figure.show()
结果如下:
2.2 完整的绘图步骤
-
导库
import matplotlib as mpl import matplotlib.pyplot as plt mpl.use('Qt5Agg') # 现在matplotlib改了,只能这样,不然无法显示图片
-
创建
figure
画布对象
如果绘制一个简单的小图形,我们可以不设置figure
对象,使用默认创建的figure
对象,当然我们也可以显示创建figure
对象。如果一张figure
画布上,需要绘制多个图形。那么就必须显示的创建figure
对象,然后得到每个位置上的axes
对象,进行对应位置上的图形绘制。 -
根据
figure
对象进行布局设置
后面详说 -
获取对应位置子图的
axes
坐标系对象figure = plt.figure() axes1 = figure.add_subplot(2,1,1) axes2 = figure.add_subplot(2,1,2)
-
调用
axes
对象,进行对应位置的图形绘制
这一步,是我们传入数据,进行绘图的一步。对于图形的一些细节设置,都可以在这一步进行。 -
显示图形
plt.show()
或figure.show()
如果在PyCharm中绘图的话,必须要加这句代码,才能显示。如果在notebook中进行绘图,可以不用加这句代码,而是自动显示。