使用 add_axes 保存 matplotlib 图

Posted

技术标签:

【中文标题】使用 add_axes 保存 matplotlib 图【英文标题】:Saving matplotlib figure with add_axes 【发布时间】:2014-07-09 12:40:59 【问题描述】:

我正在尝试保存顶部带有额外图像的图形。 然而 Python 只保存了底部的图。 我有:

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111)

ax.plot(...)
...

ax_im = fig.add_axes([0.1, 1.0, 1, 1])
ax_im.set_xticks([])
ax_im.set_yticks([])

ax.imshow(...)
...

fig.savefig('image.png')

而 Matplotlib 只保存与ax 轴相关的图形。在 iPython 笔记本中 输出很好,它显示了两个数字,所以,我不知道发生了什么。

【问题讨论】:

我发现fig.savefig('image.png', bbox_inches='tight')解决了这个问题。 【参考方案1】:

试试这样的

ax_im = fig.add_axes([0.1, 0.2, 0.5, 0.5], label='axes1')

解释是add_axes 的第二个参数是1.0。这指定了图顶部Axes 的底部。

以下示例对我有用:

import pylab as plt

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(212)

ax.plot(range(3))

ax_im = fig.add_axes([0.3, 0.5, 0.5, 0.4])
ax_im.set_xticks([])
ax_im.set_yticks([])

plt.show()

或者更简单,使用两次add_subplot

import pylab as plt

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(212)

ax.plot(range(3))

ax_im = fig.add_subplot(211)
ax_im.plot(range(3), 'o--')
ax_im.set_xticks([])
ax_im.set_yticks([])

plt.show()

【讨论】:

但是我想要第二个图在顶部,这就是为什么我将第二个值指定为1.0。如果我使用0.2,第二个图形将停留在第一个图形的中间。正如我所指定的,它在 iPython 输出上看起来不错:) fig.savefig 仅打印 0 到 1 之间的区域。如果您想在顶部显示第二个图,则必须在下部显示第一个图。我更新了这个例子。这里add_subplot212 调用。然后第二个轴从第一个轴上方 0.5 处开始。 是的,我也在想,这似乎是一个更好的选择。但是我找到了解决方案,并在评论中发布了该解决方案。感谢任何方式:)

以上是关于使用 add_axes 保存 matplotlib 图的主要内容,如果未能解决你的问题,请参考以下文章

matplotlib 画图中图和次坐标轴

在Matplotlib中,如何将3D图作为插图包含进去?

在 matplotlib 中更改 x 轴的值

如何更改 matplotlib 中轴对象刻度的字体大小 [重复]

Matplotlib笔记 · 绘图区域的结构和子图布局与划分(figure, axes, subplots)

对象不能广播到单个形状(条形图)