在Matplotlib中创建包含子图的框架

时间:2017-07-14 13:50:49

标签: python matplotlib

我想制作一个由4个数字的框架组成的图形,但在每个图形中有三个子图。我使用的是当前版本的Matplotlib

我展示我的代码是为了做每一个人的形象,我之前评论的重点是如何将这4个图组合在一起以制作单个图

filename1 = "file1.txt"
filename2 = "file2.txt"
filename3 = "file3.txt" 

datalist1 = np.loadtxt(filename1)
datalist2 = np.loadtxt(filename2)
datalist3 = np.loadtxt(filename3)


f, (ax1, ax2, ax3) = plt.subplots(3, sharex=True, sharey=True)

#First subplot

ax1.plot(datalist1[:,0], datalist1[:,1], 'k-')
ax1.plot(datalist2[:,0], datalist2[:,1], 'b-')
ax1.plot(datalist2[:,0], datalist2[:,2], 'g-')
ax1.plot(datalist2[:,0], datalist2[:,3], 'r-')
ax1.plot(datalist3[:,0], datalist3[:,1], 'k--')

ax1.set_ylim(-1.2, 1.2)
ax1.set_xlim(0, 10)

major_ticks_x = np.arange(0.0, 11, 2.0)                                        
minor_ticks_x = np.arange(0.0, 11, 1.0)   

major_ticks_y = np.arange(-1, 1.05, 1.0)                                         
minor_ticks_y = np.arange(-1, 1.05, 0.25)   

ax1.set_yticks(major_ticks_y)                                                       
ax1.set_yticks(minor_ticks_y, minor=True) 

#Second subplot

ax2.plot(datalist1[:,0], datalist1[:,2], 'k-')
ax2.plot(datalist2[:,0], datalist2[:,4], 'b-')
ax2.plot(datalist2[:,0], datalist2[:,5], 'g-')
ax2.plot(datalist2[:,0], datalist2[:,6], 'r-')
ax2.plot(datalist3[:,0], datalist3[:,1], 'k--')

ax2.set_ylim(-1.2, 1.2)
ax2.set_xlim(0, 10)                       
ax2.set_yticks(major_ticks_y)                                                       
ax2.set_yticks(minor_ticks_y, minor=True) 

#Third subplot

ax3.plot(datalist1[:,0], datalist1[:,3], 'k-')
ax3.plot(datalist2[:,0], datalist2[:,7], 'b-')
ax3.plot(datalist2[:,0], datalist2[:,8], 'g-')
ax3.plot(datalist2[:,0], datalist2[:,9], 'r-')
ax3.plot(datalist3[:,0], datalist3[:,1], 'k--')
ax3.set_ylim(-1.2, 1.2)
ax3.set_xlim(0, 10)

ax3.set_yticks(major_ticks_y)                                                       
ax3.set_yticks(minor_ticks_y, minor=True) 
ax3.set_xticks(major_ticks_x)                                                       
ax3.set_xticks(minor_ticks_x, minor=True)

ax3.set_xlabel(r"$t$")

f.subplots_adjust(hspace=0.0)
plt.setp([a.get_xticklabels() for a in f.axes[:-1]], visible=False)

我想要获得的情节是这样的,如图所示:

enter image description here

有人知道该怎么办?谢谢你的关注。

1 个答案:

答案 0 :(得分:0)

好的,我会咬人的。目前还不清楚你想要什么,但我想你想要将12个子图(6行,2列)分成4组,共享x轴。

像往常一样创建子图和绘图很容易。共享x轴也很简单,但需要一些手动工作。您可以在子图创建期间设置共享x轴,也可以在之后修改它。我认为修改之后更简单。

很抱歉中间的手册部分 - 显然可以实现自动化。

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
fig, axx = plt.subplots(6, 2, figsize=(10,14))

## merge axis
axx[0, 0].get_shared_x_axes().join(axx[0, 0], axx[2, 0])
axx[0, 0].set_xticklabels([])
axx[1, 0].get_shared_x_axes().join(axx[1, 0], axx[2, 0])
axx[1, 0].set_xticklabels([])

axx[0, 1].get_shared_x_axes().join(axx[0, 1], axx[2, 1])
axx[0, 1].set_xticklabels([])
axx[1, 1].get_shared_x_axes().join(axx[1, 1], axx[2, 1])
axx[1, 1].set_xticklabels([])

axx[3, 0].get_shared_x_axes().join(axx[3, 0], axx[5, 0])
axx[3, 0].set_xticklabels([])
axx[4, 0].get_shared_x_axes().join(axx[4, 0], axx[5, 0])
axx[4, 0].set_xticklabels([])

axx[3, 1].get_shared_x_axes().join(axx[3, 1], axx[5, 1])
axx[3, 1].set_xticklabels([])
axx[4, 1].get_shared_x_axes().join(axx[4, 1], axx[5, 1])
axx[4, 1].set_xticklabels([])

# plot some data
for i, row in enumerate(axx):
    for j, cell in enumerate(row):
        if i <= 2:
            cell.plot(np.random.rand(100))
        else:
            cell.plot(np.random.rand(200))

结果如下。 enter image description here