2017-07-14 39 views
0

我想制作一个由4个图形构成的图形,但每个图中都有三个子图。我使用Matplotlib使用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) 

,我想获得该地块是somtehing这样,在一个单一的数字:

enter image description here

有人知道如何才能做到这一点?感谢您的关注。

+0

任何原因你想在一个图中共享x轴的4个数字或12个子图会做什么?因为真的可以在一个图中使用12个子图进行。 – omdv

+0

啊,这是一个很好的观点,实际上我主张将数字分为x和y轴,但必须是可以区分每个数字的东西,如a),b),c),d)。 – Joe

+0

也许你改说你的问题,因为在matplotlib中,画布只包含一个图形,而该图形可以有任意多个子图。在图中放置一个数字是不可能的。 – ImportanceOfBeingErnest

回答

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

相关问题