沧海拾珠

Matplotlib 中add_axes, add_subplot,subplot 和subplots用法解析

1. add_axes 表示在画板上添加一个轴域(个人理解就是在画板上开始画图)。add_axes([x0, y0, width, height])是轴域在画板上的原点坐标值及宽度,高度。

figure

1
2
3
4
5
fig = plt.figure() #创建一个画板
# 在画板上添加一个轴域。0,0表示轴域的坐标点,1,1表示轴域的宽和高,这个是与画板的比例值。
# 这里表面该轴域与画板一样大。
ax = fig.add_axes([0,0,1,1])

2. add_subplot()指在画板上添加一个图,不给定坐标值,程序本身会调整大小。相比于add_axes更为灵活,特别是在画多个图时。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import matplotlib.pyplot as plt
x = range(1,10)
y = [1,2,3,4,0,4,3,2,1]
fig = plt.figure()
#参数意思是将画布分割成2行3列,图像在从左到右从上到下的第1块。
ax = fig.add_subplot(2,3,1)
ax.pie(x)
#参数意思是将画布分割成2行3列,图像在从左到右从上到下的第3块。
ax = fig.add_subplot(2,3,3)
ax.plot(x,y)
plt.show()

figure

3. subplot() 画图方法,跟add_subplot类似,但使用subplot会删除之前画板上已有的图。

1
2
3
4
5
6
import matplotlib.pyplot as plt
plt.plot([1,2,3])
# 创建一个两行两列的子图,替换掉前面创建的子图及轴域
plt.subplot(2,1,1)
plt.plot(range(12))
plt.subplot(2,1,2, facecolor='y')

效果如图:
20180428_subplot

如果使用add_subplot则会保留前面创建的子图及轴域。

1
2
3
4
5
plt.plot([1,2,3])
fig = plt.figure()
axe = fig.add_subplot(211)
plt.plot(range(12))
axe = fig.add_subplot(212, facecolor='y')

效果如图:
20180428_add_subplot
20180428_subplot

4. subplots 画图方法。

画一个图:

1
fig, ax = plt.subplots() # plt.subplots() 返回一个tuple,其中包含一个图片和轴域对象。

画几个图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 画一个一行两列的两个图。
fig, axes = plt.subplots(1,2)
axes[0].plot(x)
axes[1].plot(x,y)
#生成2行2列4个子图
fig, axes = plt.subplots(2,2)
#获取第一行第二列的图片
reviews['points'].value_counts().sort_index().plot.bar(ax=axarr[0][0])
#获取第二行第二列的图片
reviews['province'].value_counts().head(20).plot.bar(ax=axarr[1][1])
#设置其他标签
axarr[0][0].set_title("Wine Scores", fontsize=18)

效果如图:
20180517_subplots