在Matplotlib中创建一个带有子批次的帧

2024-06-28 19:51:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一个图形,它由一个有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

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


Tags: true图形plotnpsetminormajorticks
1条回答
网友
1楼 · 发布于 2024-06-28 19:51:47

好吧,我咬一口。目前还不清楚您想要什么,但我假设您希望12个子图(6行,2列)用共享的x轴分为4组。在

像往常一样,创建子图和绘图很容易。共享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

相关问题 更多 >