来分析怎么样实现两个子图显示的功能。Matplotlib 嵌套子图显示是实现一个子图的功能,不知道你学会了没有,如果没有,赶紧看前文,这样比较地看才会更加深刻,更加容易懂。
好吧,先来看本文实现的结果,如下图:
在这里使用绘图的数据,还是像前文一样,使用正态分布生成的数据,同样的一份数据,在三个图里实现绘制。绿色的是第一个子图,蓝色的是第二个子图,红色的是主图。三个图形使用的数据是一样的,所以绘制起的曲线形状是一样的。当然,一般来说使用嵌套子图,往往是实现不同角度,不同的分析方法来进行对比,或者细节数据的呈现。
fig = plt.figure() #创建子图
这行代码是实现创建一个窗口的画布。
x = np.linspace(1, 100, 100)
y = np.random.normal(75.0, 15.0, 100)
这两行代码与前面一样,采用正态分布来产生数据,不过这里产生了100个数据点。
ax1 = fig.add_axes([0.1,0.1,0.8,0.8])
ax1.plot(x,y,'r')
ax1.set_xlabel("x")
ax1.set_ylabel("y")
ax1.set_title('title main')
这段代码是实现主图的绘制,add_axes()函数定义了主图在整个画布里位置,离左边10%,离上部10%,离下边和右边都是20%的位置。然后调用函数plot进行画曲线,颜色为红色。set_xlabel("x")是设置X轴的标记,set_ylabel("y")是设置Y轴的标记,set_title(‘title main’)是设置标题显示。
接着下来就是绘第一个子图:
#子图1
ax2 = fig.add_axes([0.2,0.6,0.25,0.25])
ax2.plot(x,y,'g')
ax2.set_xlabel('x')
ax2.set_ylabel('y')
ax2.set_title('title inside1')
第一行代码add_axes()方法通过相对位置增加子图,接着调用plot(x,y,’g’)来绘子图,其它是设置子图的X轴和Y轴的标记,以及子图的标题。
最后来绘制第二个子图,这个要特别注意了,因为它的实现方式有点不一样。
#子图2
plt.axes([0.6,0.2,0.25,0.25])
plt.plot(x, y, ls = '-', lw = 2, color = 'b')
plt.xlabel('x')
plt.ylabel('y')
plt.title('title inside2')
这里通过调用plt.axes([0.6,0.2,0.25,0.25])来增加一个子图,然后调用plt.plot(x, y, ls = ‘-‘, lw = 2, color = ‘b’)来绘曲线,其它子图的X轴和Y轴的标记,以及子图的标题。
总结一下,这里最不一样的地方,是绘制第二个子图的方式,并不是使用第一个子图相同的代码,这样理解起来就有点困难了,不过只要学习过一遍,就不会搞错它了。
整个例子的代码如下:
import numpy as np
import matplotlib.pyplot as plt
#
fig = plt.figure() #创建子图
#
x = np.linspace(1, 100, 100)
y = np.random.normal(75.0, 15.0, 100)
#主图
ax1 = fig.add_axes([0.1,0.1,0.8,0.8])
ax1.plot(x,y,'r')
ax1.set_xlabel("x")
ax1.set_ylabel("y")
ax1.set_title('title main')
#子图1
ax2 = fig.add_axes([0.2,0.6,0.25,0.25])
ax2.plot(x,y,'g')
ax2.set_xlabel('x')
ax2.set_ylabel('y')
ax2.set_title('title inside1')
#子图2
plt.axes([0.6,0.2,0.25,0.25])
plt.plot(x, y, ls = '-', lw = 2, color = 'b')
plt.xlabel('x')
plt.ylabel('y')
plt.title('title inside2')
plt.show()