当尝试在Matplotlib中强制执行Poly3DCollection
对象的光栅化时,我收到以下错误消息(我可以确认没有应用光栅化):
/usr/lib/python3/dist-packages/matplotlib/artist.py:788: UserWarning: Rasterization of '<mpl_toolkits.mplot3d.art3d.Poly3DCollection object at 0x2b49e8faeba8>' will be ignored
warnings.warn("Rasterization of '%s' will be ignored" % self)
可以对整个图形进行栅格化,但显然最好只栅格化某些对象,同时将轴,标签,键,文本等项目保存为矢量图形。
我在我的代码中尝试使用以下语法:
ax.add_collection3d(Poly3DCollection(polygons, rasterized=True), zs='z')
c = Poly3DCollection(polygons)
然后c.set_rasterized(True)
根据this post,可以栅格化PolyCollection
(没有3D位)对象。
有什么建议吗?
这是一个MWE:
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection, Line3DCollection
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.set_xlim([0, 4])
ax.set_ylim([0, 4])
ax.set_zlim([0, 4])
polygons = [[(3, 1, 1), (1, 3, 1), (1, 1, 3)]]
ax.add_collection3d(Poly3DCollection(polygons, facecolors='r', rasterized=True), zs='z')
plt.show()
答案 0 :(得分:3)
首先请注意,光栅化仅适用于导出矢量图形,如pdf。我假设这是你在这里谈论的,所以我想你最后会打plt.savefig("some.pdf")
之类的东西。
我认为有人忘了允许3D对象进行光栅化。
修复将进入matplotlib源代码,找到
python\lib\site-packages\mpl_toolkits\mplot3d\art3d.py
在导入部分添加
from matplotlib.artist import allow_rasterization
并进一步向下Poly3DCollection
内找到draw
方法(在我的情况下,它在第709行)并添加@allow_rasterization
。它应该看起来像
@allow_rasterization
def draw(self, renderer):
return Collection.draw(self, renderer)
如果然后运行上面的代码,再加上保存为pdf,则三角形被栅格化。 pdf:
的屏幕截图