使用savefig()将图形导出为pdf会使matplotlib中的轴背景混乱

时间:2013-04-08 17:59:22

标签: python macos matplotlib osx-mountain-lion

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

当我使用savefig()保存图形的pdf时,如果轴显示多个图像,则会丢失背景颜色。请注意,导出相同数字的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输出相同):

test.pdf

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

test.png

我是否碰到了一个matplotlib错误,或者是否有一些我想要修复pdf输出的命令?

编辑:我已使用默认matplotlibrc重新绘制了数字。

2 个答案:

答案 0 :(得分:5)

这最终成了一个matplotlib错误。

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

这已作为an issue I opened in the matplotlib's GitHub repo的一部分得到解决。

答案 1 :(得分:1)

查看您的matplotlibrc。有一部分以savefig开头的选项定义了您保存的数字的外观。即使默认matplotlibrc也有此部分。

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