在 pyplot 中绘制不同大小的子图

问题描述 投票:0回答:1

我想在 pyplot 中绘制一个图形,它有 3 个垂直排列的子图。第一个的纵横比为 1:1,而另外两个的纵横比为 2:1。每个地块的高度应该相同。这意味着第一个图的左右边界距离画布的边界相当远。有人可以帮我解决这个问题吗?我尝试过使用 hspace 命令,但这最终会改变所有子图的间距,而不仅仅是第一个子图。

我还通过在子图中创建子图来尝试以下操作,但 wspace 似乎在图中没有任何区别:

fig = plt.figure(figsize=(3.385, 2*3))
outer = gridspec.GridSpec(2, 1, wspace=2.0, hspace=0.1, height_ratios=[1,3])
inner1 = gridspec.GridSpecFromSubplotSpec(1, 1,
                    subplot_spec=outer[0], wspace=0.1, hspace=0.1)
inner2= gridspec.GridSpecFromSubplotSpec(2, 1,
                    subplot_spec=outer[1], wspace=0.1, hspace=0.1)



ax1 = plt.Subplot(fig, inner1[0])
(ax2,ax3)= plt.Subplot(fig, inner2[0]), plt.Subplot(fig, inner2[1])

fig.add_subplot(ax1); fig.add_subplot(ax2); fig.add_subplot(ax3)



ax1.plot(x1, y1, "-", color="k" )
ax2.plot(x2, y2, "-")
ax3.plot(x3,y3, "--)

plt.show()

For illustration, I would like a plot that looks something like this:

有人可以帮我解决这个问题吗?

python matplotlib plot subplot
1个回答
0
投票

创建3个垂直排列的子图,它们的高度默认相等。然后根据需要设置宽高比。

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=3)
axes[0].set_aspect(1)
axes[1].set_aspect(.5)
axes[2].set_aspect(.5)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.