将多组子图拟合成一个图

时间:2017-06-30 20:06:09

标签: python matplotlib

我是否可以在一个运行三次的for循环中制作一组子图(带有2个图),然后将三组子图组合成一个主图。这一点的重点是能够在一个图上有6个图,但在每个其他图之间有一个空格。我知道如何在一个图中有6个图,但我只能在每个图之间放置空格而不是每个其他图。我希望我的问题有道理。至于我正在使用的数据,它是我现在用于练习的非常基本的数据集。每对绘图共享相同的x轴,这就是为什么我不希望它们之间有空格。

import matplotlib.pyplot as plt

x1 = [0,1,2,3,4,5]
y1 = [i*2 for i in x1]
y2 = [i*3 for i in x1]

x2 = [4,8,12,16,20]
y3 = [i*5 for i in x2]
y4 = [i*3 for i in x2]

x3 = [0,1,2,3,4,5]
y5 = [i*4 for i in x3]
y6 = [i*7 for i in x3]

fig = plt.figure(1,figsize=(5,5))

ax1 = plt.subplot(611)
ax1.plot(x1,y1)

ax2 = plt.subplot(612)
ax2.plot(x1,y2)

ax3 = plt.subplot(613)
ax3.plot(x2,y3)

ax4 = plt.subplot(614)
ax4.plot(x2,y4)

ax5 = plt.subplot(615)
ax5.plot(x3,y5)

ax6 = plt.subplot(616)
ax6.plot(x3,y6)

fig.subplots_adjust(hspace=0.5)

plt.show()

这就是我得到的:

enter image description here

1 个答案:

答案 0 :(得分:3)

您的代码会生成包含六个子图的图表。如果您制作了8个子图并将其中两个留空,则会获得额外的空间。这是我使用的代码,稍微修改了代码。

import matplotlib.pyplot as plt

x1 = [0,1,2,3,4,5]
y1 = [i*2 for i in x1]
y2 = [i*3 for i in x1]

x2 = [4,8,12,16,20]
y3 = [i*5 for i in x2]
y4 = [i*3 for i in x2]

x3 = [0,1,2,3,4,5]
y5 = [i*4 for i in x3]
y6 = [i*7 for i in x3]

fig = plt.figure(1,figsize=(5,7))

ax1 = plt.subplot(811)
ax1.plot(x1,y1)

ax2 = plt.subplot(812)
ax2.plot(x1,y2)

ax3 = plt.subplot(814)
ax3.plot(x2,y3)

ax4 = plt.subplot(815)
ax4.plot(x2,y4)

ax5 = plt.subplot(817)
ax5.plot(x3,y5)

ax6 = plt.subplot(818)
ax6.plot(x3,y6)

fig.subplots_adjust(hspace=0.5)

plt.show()

我得到了这个结果:

Eight subplots, 7 inches tall

我不得不将图形尺寸高度增加到7英寸以容纳额外的空间。这就是你想要的吗?