matplotlib 在PDF 3D中保存3D图

9fkzdhlc  于 2023-05-01  发布在  其他
关注(0)|答案(2)|浏览(192)

我用python和pyplot生成了一个3D图。我可以将此图导出为PDF。很无聊,有时候。平面3D图可能难以阅读/理解。
但是,PDF支持交互式3D模型,例如CAD模型。这让我想知道是否可以将matplotlib或类似工具生成的3D绘图导出到3D PDF中?这将是惊人的存储美丽的3D情节!如果是这样,我该如何做呢?

cqoc49vn

cqoc49vn1#

与其说是一个答案,不如说是我迄今为止研究的总结:

  • a previous question问了差不多同样的问题,但没有得出结论
  • .pdf支持两种内部3D格式-u3d(自版本7起)和prc(自版本8起)。PRC是更复杂但更紧凑的格式。
  • (c. 2006):Acrobat 3d支持更多格式-超过40 -但通过将它们转换为u3d以供导入(reference
  • (2013年12月):matplotlib的绘图核心仅为2d;mplot 3d只是一个解决方案,所有内容都在渲染之前投影到2d。(reference)链接到GlumPy

目前,我看到两种可能的方法:

  • 为matplotlib编写新的3d输出引擎到u3d
  • 将matplotlib的3d渲染器写入OpenGL(Acrobat 3d可以捕获活动OpenGL帧的内容)
unhi4e5o

unhi4e5o2#

我相信如果你想使用PDF,彩色材料最好打开rasterized=True,否则有时图形尺寸太大,不可能完成:
3D绘图示例:

from mpl_toolkits import mplot3d

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = plt.axes(projection="3d")

z_line = np.linspace(0, 15, 1000)
x_line = np.cos(z_line)
y_line = np.sin(z_line)
ax.plot3D(x_line, y_line, z_line, 'gray')

z_points = 15 * np.random.random(100)
x_points = np.cos(z_points) + 0.1 * np.random.randn(100)
y_points = np.sin(z_points) + 0.1 * np.random.randn(100)
ax.scatter3D(x_points, y_points, z_points, c=z_points, cmap='hsv',rasterized=True);

plt.savefig('test2.pdf',format='pdf')
plt.show()

相关问题