首先我们要理解plt, figure和ax三者的关系。
plt是Matplotlib.pyplot的简称,内部的各种API可以理解成是plt作者给用户准备的懒人包,自动定义一个初始绘图环境,开箱即用。缺点是不够灵活。
而figure可以理解成一个桌面,而每个axes就是桌面上的一张张纸或画布。如下图所示,两者是互相包含的关系。而我们最终的图是画在一张张axes上的。一个figure可以包含多张axes。通过分别定义figure和axes,我们可以更精准地控制每张图的参数,画出更复杂、美丽的组图
因此,当熟悉以上概念,下面来分不同场景或需求,介绍下建议使用的API
- 如果你只是做简单的可视化,画出的图甚至不需要保存,仅仅看一眼,也不关心后续的扩展,使用plt足矣。它等于直接帮你弄来了一个用一张白纸铺满的桌子,直接就可以上手画图。定义一批数据,使用plt.plot()函数绘制曲线,效果如下。
import numpy as np
import matplotlib.pyplot as plt
x = range(-100,100)
y = [i*i for i in x]
plt.plot(x,y)
- 如果你需要对绘制的图有精准的控制,那么就需要将figure和axes分开定义了,如plt.subplots().代码中分别定义了四个变量:ax11,ax12,ax21,ax22代表四个axes,并分别Plot。这里需要清楚的一点是,plt类中包含的大部分绘图函数,在axes类中也有,例如plt.plot()与ax.plot(), plt.scatter()与ax.scatter()。plt.tight_layout()语句往往用于多axes排版有误的情况(Adjust the padding between and around subplots.)
import numpy as np
import matplotlib.pyplot as plt
x = range(-100,100)
y = [i*i for i in x]
fig,((ax11,ax12),(ax21,ax22)) = plt.subplots(2,2)
ax11.plot(x,y)
ax12.plot(x,y)
ax21.plot(x,y)
ax22.plot(x,y)
plt.tight_layout()
- 但是按第三条的做法,当我们需要排版大量的子图(axes)时,由于每个子图都要分别定义、调用,工作量会十分冗余。此时比较灵活的是使用add_subplot()。且这种方式可以明确的定义每一步的行为,且可以套用循环,清晰明了。因此在日常工作中,我也常常会采用这种绘图方式。即使仅需要绘制一张图,也可以用add_subplot(1,1,1)来定义,为后续扩展留下空间。
import numpy as np
import matplotlib.pyplot as plt
x = range(-100,100)
y = [i*i for i in x]
fig = plt.figure() #定义figure,后面的axes都是在这张figure上绘制
for i in range(8):
ax = fig.add_subplot(4,2,i+1) #这里的4,2是固定值,i+1是因为Python默认从0开始数数
ax.plot(x,y)
plt.tight_layout()
标签:plot,plt,figure,axes,Matplotlib,画布,设置,import,100
From: https://www.cnblogs.com/geoli/p/18616424