matplotlib 布局紧凑,带有绘图和 Slider 对象

matplotlib tight layout with plots and Slider object

我正在尝试编写一个数据分析工具,该工具由一个 matplotlib window 绘制两个图表,一个在另一个上方,一个滑动条与其中一个图进行交互。

在目前的状态下,看起来是这样的:

我的问题是我想尽可能多地使用 window 中可用的 space 因此我在绘制之前调用 tight_layout() 但滑块对象是没有移动到图表下方,它停留在我首先使用以下方法绘制的位置:

axamp  = plt.axes([0.1, 0, 0.8, 0.03], axisbg=axcolor)
samp = Slider(axamp, 'Amp', 0.1, 10.0, valinit=a0)

有没有办法让它仍然使用 tight_layout() 移动到图表下方,而不必手动为 window 中的所有对象提供 canvas 位置?

我没弄明白 tight_layout(),但你可以玩 subplots_adjust()。经过一些手动调整后,它将带您到达那里。 重点是将 bottom 参数设置得足够高,这样您的所有滑块都适合子图。使用 leftrighttop,您可以设置边距,以便您的子图可以根据需要填充 space。通过使用 wspacehspace,您可以设置在各个子图之间使用多少 space。

fig, axes = plt.subplots(4, 4, figsize=(9,10))
fig.subplots_adjust(left=0.05, bottom=0.15, right=0.95, top=0.98, wspace=0.05, hspace=0.05)

如果您的子图包含 imshow,那么 figsize 也会起作用,因为 aspect 参数的默认值是 None,这确保了像素是正方形。因此,如果您不介意拉伸图像,请使用 figsize 或设置 aspect='auto'