6

我正在尝试更改绘图上的轴背景,其中几个调用通过参数imshow()在不同位置渲染图像。extent

当我使用 保存图形的 pdf 时,savefig()如果轴显示多个图像,我会丢失背景颜色。请注意,导出相同图形的 png 时不会发生这种情况。

这是说明问题的最小脚本:

import matplotlib.pyplot as plt
from numpy.random import rand

fig, ax = plt.subplots(nrows=3, ncols=1, sharex=True)

ax[0].imshow(rand(15,15), extent=[0, 2, 15, 0], \
            cmap=plt.cm.gray, aspect='auto', interpolation='Nearest')
ax[0].set_axis_bgcolor('k')

ax[1].imshow(rand(15,15), extent=[0, 2, 15, 0], \
            cmap=plt.cm.gray, aspect='auto', interpolation='Nearest')
ax[1].imshow(rand(15,15), extent=[4, 6, 15, 0], \
            cmap=plt.cm.gray, aspect='auto', interpolation='Nearest')
ax[1].set_axis_bgcolor('k')

ax[2].imshow(rand(15,15), extent=[0, 2, 15, 0], \
            cmap=plt.cm.gray, aspect='auto', interpolation='Nearest')
ax[2].imshow(rand(15,15), extent=[4, 6, 15, 0], \
            cmap=plt.cm.gray, aspect='auto', interpolation='Nearest')
ax[2].imshow(rand(15,15), extent=[8, 10, 15, 0], \
            cmap=plt.cm.gray, aspect='auto', interpolation='Nearest')
ax[2].set_axis_bgcolor('k')

ax[-1].set_xlim([0, 12])
fig.savefig('test.pdf', format='PDF')
fig.savefig('test.png', format='PNG')

这是脚本的 pdf 输出(eps 输出相同):

测试.pdf

这是脚本的预期输出(保存为 png):

测试.png

我是否遇到了 matplotlib 错误,或者是否有一些我缺少的命令可以修复 pdf 输出?

编辑:我用默认值重新绘制了数字matplotlibrc

4

2 回答 2

6

这最终成为一个 matplotlib 错误。

在同一轴上渲染多个图像时,会创建一个合成图像,在渲染为 pdf 时没有透明背景,因此轴的背景颜色不会显示出来。

这作为我在 matplotlib 的 GitHub 存储库中打开的问题的一部分得到了解决。

于 2013-04-11T21:22:49.900 回答
2

查看您的matplotlibrc. 有一部分选项从savefig定义您保存的图形的外观开始。甚至默认matplotlibrc有这个部分。

还有一个类似的问题:matplotlib savefig() plots different from show()

于 2013-04-11T16:27:01.867 回答