Python 在Matplotlib中创建具有子地块的帧

Python 在Matplotlib中创建具有子地块的帧,python,matplotlib,Python,Matplotlib,我想制作一个由4个图形组成的图形,但在每个图形中有三个子图。我正在使用Matplotlib的当前版本 我展示了我的代码,以便绘制每个单独的图形,正如我之前所评论的,重点是如何将这4个图放在一起,从而生成一个单独的图形 filename1 = "file1.txt" filename2 = "file2.txt" filename3 = "file3.txt" datalist1 = np.loadtxt(filename1) datalist2 = np.loadtxt(filename2)

我想制作一个由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)
我想得到的图是这样的,在一个图中:


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

好的,我咬一口。不清楚您想要什么,但我假设您想要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))
导入matplotlib.pyplot作为plt
将numpy作为np导入
图=plt.图()
图,axx=plt.子批次(6,2,figsize=(10,14))
##合并轴
axx[0,0]。获取共享的轴()。连接(axx[0,0],axx[2,0])
axx[0,0]。设置xticklabels([])
axx[1,0]。获取共享的轴()。加入(axx[1,0],axx[2,0])
axx[1,0]。设置字符串([])
axx[0,1]。获取共享的轴()。连接(axx[0,1],axx[2,1])
axx[0,1]。设置字符串([])
axx[1,1]。获取共享的轴()。连接(axx[1,1],axx[2,1])
axx[1,1]。设置xticklabel([])
axx[3,0]。获取共享的轴()。连接(axx[3,0],axx[5,0])
axx[3,0]。设置xticklabels([])
axx[4,0]。获取共享的轴()。连接(axx[4,0],axx[5,0])
axx[4,0]。设置xticklabels([])
axx[3,1]。获取共享的轴()。连接(axx[3,1],axx[5,1])
axx[3,1]。设置字符串([])
axx[4,1]。获取共享的轴()。连接(axx[4,1],axx[5,1])
axx[4,1]。设置字符串([])
#绘制一些数据
对于i,枚举中的行(axx):
对于j,枚举(行)中的单元格:

如果我有任何理由,你想要4个图形或12个子图在一个图形与共享x轴可以吗?因为在一个图形中使用12个子图确实可以完成。啊,这是一个很好的观点,事实上我倾向于将图形放在共享x轴和y轴的位置,但必须能够区分每个图形,如a),b),c),d) 。如果在matplotlib中,画布正好由一个图形组成,并且该图形可以有任意多个子图,那么您可以重新表述您的问题。在图形中放置图形是不可能的。