3

我使用关键字在 matplotlib 中绘制多个图像imshow以及它们之间的一些矢量数据。zorder

最小的例子:

import numpy as np
import matplotlib.pyplot as plt

img = np.arange(100).reshape((10,10))
plt.imshow(img, extent = [0.25, 0.75, 0.25, 0.75], zorder = 10)
plt.imshow(img, extent = [0.1, 0.9, 0.1, 0.9], zorder = 1)
plt.plot([0, 1], [0, 1], color = 'black', zorder = 5)
plt.axis([0, 1, 0, 1])

plt.savefig('img.png')

导出为 PNG 时,输出与预期一致。但是,当保存为 PDF(或 EPS、SVG、...)时,不考虑 zorder(线条绘制在两个图像上)。导出时,这两个图像似乎合并为一个图像。pcolormesh通过使用而不是作品将图像保存为矢量而不是光栅imshow,但是在绘制大图像时生成的 PDF 非常大。有没有办法让这个工作imshow

4

1 回答 1

1

这听起来像你应该在这里提出一个错误报告 - 我确实在这里发现了一个类似的问题,但你的问题看起来足够不同,值得一张单独的票。

您可以做的是将您的对角线手动分成两部分,而不是依靠 z 顺序为您隐藏它。就像是:

plt.plot([0, 0.25], [0, 0.25], color = 'black', zorder = 5)
plt.plot([0.75, 1], [0.75, 1], color = 'black', zorder = 5)

更换您的:

plt.plot([0, 1], [0, 1], color = 'black', zorder = 5)

更新:

鉴于您的真实世界情节可能比直线复杂得多,您可能会采用顶层,您的情节并找到两者拦截删除的掩码/边界,(自动),您需要的线条部分被隐藏。

另一种选择是将所有图层生成为单独的图像,然后使用 PIL 将它们分层,但由于 PNG 输出工作正常,您最好输出为 PNG,然后转换为 PDF 或嵌入为 PDF 作为解决方法.

于 2013-10-11T08:04:25.077 回答