gpt4 book ai didi

matplotlib - 将 GridSpec 与自定义 wspace 一起使用不适用于 tight_layout

转载 作者:行者123 更新时间:2023-12-04 00:19:36 26 4
gpt4 key购买 nike

我在这里要实现的最终目标是将图形保存为具有一定大小的 .pdf(下面示例代码中的 [5,2]),没有填充在轴标签/刻度标签之外。

我通常通过使用 figsize 的组合创建一个图形并通过 tight_layout 将填充设置为零来实现这一点(我添加了灰色背景颜色以显示边缘/填充更好):

fig = plt.figure(
figsize = [5,2],
tight_layout = {'pad': 0}
)

t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2*np.pi*t)
plt.plot(t, s)

plt.savefig('figure.pdf', facecolor = (0.7,0.7,0.7))

这将创建一个大小为 5x2 的漂亮 pdf。

enter image description here

但是我在使用 GridSpec 创建子图时遇到了问题。奇怪的是,这个问题只有在为 GridSpec 设置自定义 wspace 时才会出现。

没有 wspace 的例子

fig, (ax0, ax1) = plt.subplots(
nrows = 1, ncols = 2,
gridspec_kw = {'width_ratios' : [3,2]},
tight_layout = {'pad': 0},
figsize = [5,2]
)

t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2*np.pi*t)
ax0.plot(t, s)
ax1.plot(t, s)

ax1.yaxis.tick_right()

ax0.set_xlim([0, 2.25])
ax1.set_xlim([-0.25, 2])

plt.savefig('figure.pdf')

enter image description here

示例 wspace

我添加了一些 wspace 以在子图之间留出一些空间,因为它们在上面的示例中靠得很近

fig, (ax0, ax1) = plt.subplots(
nrows = 1, ncols = 2,
gridspec_kw = {'width_ratios' : [3,2], 'wspace' : 0.1},
tight_layout = {'pad': 0},
figsize = [5,2]
)

t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2*np.pi*t)
ax0.plot(t, s)
ax1.plot(t, s)

ax1.yaxis.tick_right()

ax0.set_xlim([0, 2.25])
ax1.set_xlim([-0.25, 2])

plt.savefig('figure.pdf', facecolor = (0.7,0.7,0.7))

(与上面相比唯一的变化是在 gridspec_kw dict 中添加了 wspace)

这让我在 savefig 命令中出错

C:\Users\<username>\Anaconda3\lib\site-packages\matplotlib\figure.py:1744:
UserWarning: This figure includes Axes that are not compatible with
tight_layout, so its results might be incorrect.
warnings.warn("This figure includes Axes that are not "
# the warning is cut off here for some reason

并生成以下图像,显然没有使用 tight_layout

enter image description here

有没有人知道解决这个问题的方法,或者有更好的方法来做我正在尝试的事情?

最佳答案

如果目的是保存图像,您可以省略图形的 tight_layout 参数,并在保存图形时使用参数 bbox_inches='tight', pad_inches=0:

plt.savefig('figure.pdf', bbox_inches='tight', pad_inches=0)

关于matplotlib - 将 GridSpec 与自定义 wspace 一起使用不适用于 tight_layout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42830068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com