我正在使用imshow
在matplotlib中绘制多个图像,并使用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
?
答案 0 :(得分:1)
这听起来像你应该提出错误报告here - 我确实发现了一个类似的问题here,但你的问题看起来不同,值得一张单独的票。
你可以做的是手动将对角线分成两部分而不是依赖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格式解决方法。