Python/Matplotlib - 更改子图的相对大小

the*_*ame 28 python matplotlib

我有两个情节

import matplotlib.pyplot as plt
plt.subplot(121)
plt.subplot(122)
Run Code Online (Sandbox Code Playgroud)

我想要plt.subplot(122)宽一半plt.subplot(121).是否有一种直接的方法来设置子图的高度和宽度参数?

Jos*_*del 41

请参阅grid-spec教程:

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()
Run Code Online (Sandbox Code Playgroud)

您还可以使用GridSpec中的类似选项调整高度比

  • 有没有办法以绝对值指定子图/网格列的大小?即:绘制具有固定宽度的自定义颜色条? (2认同)

big*_*ose 13

只需使用" 122" 指定几何体,就可以隐式获得自动的,大小相等的列 - 行布局.

要自定义布局网格,您需要更具体一些.请参阅Matplotlib文档中的" 使用GridSpec自定义子图的位置 ".


xua*_*g84 7

是的,如果您想将代码缩减为一行,您可以将所有要传递给matplotlib.gridspec.GridSpec(), 的kwargs放入 的gridspec_kw参数中plt.subplots()

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])
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明