使用Python在PDF 3D中保存3D图

时间:2016-02-19 15:16:14

标签: python pdf matplotlib 3d

我用python和pyplot生成了一个3D图。我可以将此图导出为PDF。这有点无聊,有时候。平面3D图很难阅读/理解。

但是,PDF支持3D模型,例如CAD模型。这让我想知道是否有可能将matplotlib或类似东西生成的3D绘图输出到3D PDF?这将是惊人的存储美丽的3D情节!如果是这样,我该怎么做?

2 个答案:

答案 0 :(得分:5)

到目前为止,作为我的研究摘要的答案并非如此:

  • 一个previous question问得几乎一样但没有得出结论

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

  • (c.2006):Acrobat 3d支持更多格式 - 超过40种 - 但是通过将它们转换为u3d进行导入(reference

  • (2013年12月):matplotlib的绘图核心仅为2d; mplot3d只是一种解决方法,在渲染之前,所有内容都会被投射到2d。 (reference)链接到GlumPy

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

  • 将matplotlib的新3d输出引擎写入u3d

  • 将matplotlib的3d渲染器写入OpenGL(Acrobat 3d可以捕获活动的OpenGL帧的内容)

答案 1 :(得分:-1)

我相信,如果您想使用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()