更改子图的相对大小

41 投票
3 回答
61564 浏览
提问于 2025-04-16 12:20

我有两个图表

import matplotlib.pyplot as plt
plt.subplot(121)
plt.subplot(122)

我想让 plt.subplot(122) 的宽度是 plt.subplot(121) 的一半。有没有简单的方法可以设置子图的高度和宽度参数呢?

3 个回答

23

是的,如果你想把代码简化成一行,可以把所有要传给 matplotlib.gridspec.GridSpec() 的参数,放到 plt.subplots()gridspec_kw 参数里:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

fig, axs = plt.subplots(nrows=2, ncols=2, gridspec_kw={'width_ratios':[2,1], 'height_ratios':[2,1]})

df = pd.DataFrame(np.random.randn(10, 3), columns=['A', 'B', 'C'])
df.plot.bar(ax=axs[0][0])
df.boxplot(ax=axs[0][1])
df.plot.line(ax=axs[1][0])
df.plot.kde(ax=axs[1][1])

在这里输入图片描述

54

请查看网格规格的教程:

http://matplotlib.sourceforge.net/users/gridspec.html

下面是示例代码:

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

f = plt.figure()

gs = gridspec.GridSpec(1, 2,width_ratios=[2,1])
              
ax1 = plt.subplot(gs[0])
ax2 = plt.subplot(gs[1])

plt.show()

在这里输入图片描述

你还可以通过在GridSpec中使用类似的选项来调整高度比例。

14

通过简单地用“122”来指定布局,你实际上是在自动生成一个大小相等的列和行的布局。

如果你想要自定义这个布局网格,就需要更具体一些。可以查看Matplotlib文档中的“使用GridSpec自定义子图位置”。

撰写回答