Matplotlib:带有平方 imshow 的子图高度
Matplotlib: Subplot heights with squared imshow
我想绘制一个三面板图,上面有一个 imshow
,下面有另外两个图。我的 imshow
具有相同的 x 和 y 维度,即。是平方的。其他两个图具有相同的 x 维度,因此它们可以共享 x 轴。但是,如何指定所有三个面板具有相同的宽度?
这是我的代码
import matplotlib.pyplot as plt
x = np.linspace(0,100,20)
y = np.sin(x)
z = np.random.rand(100,100)
fig, (ax, ax2, ax3) = plt.subplots(nrows=3, sharex=True, figsize=(10,10), gridspec_kw={"height_ratios": [2,1,1]})
# "main" plot
ax.imshow(z)
# accessory plot #1
ax2.plot(x, y)
ax2.set_xlim(0,99)
# accessory plot #2
ax3.plot(x*2, y)
plt.show()
我不明白这里的行为,为什么我的 imshow
没有像下面两个面板那样的正确宽度?
我找到了一个解决方案 ,但据我了解,这只能在每一侧创建一个附加轴?
这是我当前的输出:
我希望它看起来像这样:
布局绝对是 matplotlib 可以使用的东西。发生的事情是你有一个正方形图形,height_ratios=[2, 1, 1]
:第一个轴(你绘制图像的地方)的高度是其他两个轴的两倍。但是你绘制的图像也是正方形的,所以它使用了所有可用的高度,而它在水平方向上有“白色”space。
试着玩 figsize
,也许 height_ratios
,像这样:
fig, (ax, ax2, ax3) = plt.subplots(nrows=3, sharex=True, figsize=(6,12), gridspec_kw={"height_ratios": [4,1,1]})
我想绘制一个三面板图,上面有一个 imshow
,下面有另外两个图。我的 imshow
具有相同的 x 和 y 维度,即。是平方的。其他两个图具有相同的 x 维度,因此它们可以共享 x 轴。但是,如何指定所有三个面板具有相同的宽度?
这是我的代码
import matplotlib.pyplot as plt
x = np.linspace(0,100,20)
y = np.sin(x)
z = np.random.rand(100,100)
fig, (ax, ax2, ax3) = plt.subplots(nrows=3, sharex=True, figsize=(10,10), gridspec_kw={"height_ratios": [2,1,1]})
# "main" plot
ax.imshow(z)
# accessory plot #1
ax2.plot(x, y)
ax2.set_xlim(0,99)
# accessory plot #2
ax3.plot(x*2, y)
plt.show()
我不明白这里的行为,为什么我的 imshow
没有像下面两个面板那样的正确宽度?
我找到了一个解决方案
这是我当前的输出:
我希望它看起来像这样:
布局绝对是 matplotlib 可以使用的东西。发生的事情是你有一个正方形图形,height_ratios=[2, 1, 1]
:第一个轴(你绘制图像的地方)的高度是其他两个轴的两倍。但是你绘制的图像也是正方形的,所以它使用了所有可用的高度,而它在水平方向上有“白色”space。
试着玩 figsize
,也许 height_ratios
,像这样:
fig, (ax, ax2, ax3) = plt.subplots(nrows=3, sharex=True, figsize=(6,12), gridspec_kw={"height_ratios": [4,1,1]})