将3D图形保存为PDF 3D。

9
我已经使用Python和pyplot生成了一个3D图形。我可以将这个图形导出为PDF格式。但是这种方法有时很无聊,而且平面的3D图形很难读/理解。
然而,PDF支持交互式3D模型,比如CAD模型。这让我想知道是否可能将由matplotlib或类似工具生成的3D图形导出为3D PDF?这将非常棒,可以存储美丽的3D图形!如果可以的话,该怎么做呢?
2个回答

8

以下是我迄今为止的研究总结:

  • 之前的问题几乎相同,但未得出结论。

  • .pdf支持两种内部3D格式 - u3d(自版本7起)和prc(自版本8起)。prc是一种更复杂但更紧凑的格式。

  • (约2006年):Acrobat 3d支持多达40多种格式,但通过将它们转换为u3d进行导入来实现此目的(参考资料)

  • (2013年12月):matplotlib的绘图核心仅支持2D;mplot3d只是一个解决方法,在渲染之前,所有内容都会被投影到2D上。(参考资料) 链接到GlumPy

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

  • 为matplotlib编写一个新的3D输出引擎到u3d

  • 为matplotlib编写一个3D渲染器到OpenGL(Acrobat 3d可以捕获活动OpenGL帧的内容)


matplotlib不像ggplot2(R)或plotly那样序列化它们的图形,因此很难将mpl图形从一种格式转换为另一种格式。遗憾的是,有关此问题的讨论在此处:https://github.com/matplotlib/matplotlib/wiki/MEP25 - user1561393

-3

我认为如果您想使用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()

1
将“平面”3D图绘制成PDF格式并不是问题。问题在于创建一个交互式的3D图形PDF,而这个答案并没有解决这个问题。 - SjonTeflon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接