将 3D 表面保存为 pdf 时出现黑线:我怎样才能摆脱它们?
Posted
技术标签:
【中文标题】将 3D 表面保存为 pdf 时出现黑线:我怎样才能摆脱它们?【英文标题】:Black lines when saving 3D surface to pdf: How can I get rid of them? 【发布时间】:2015-04-23 11:46:00 【问题描述】:我有以下代码来使用 ax.plot_surface
显示 3D 表面:
fig = plt.figure()
ax = fig.gca(projection='3d')
X,Y = np.meshgrid(range(k_mean.shape[0]), range(k_mean.shape[1]))
Z = k_mean
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, linewidth=0., alpha=0.8, cmap=cm.nipy_spectral, antialiased=False, shade=False)
cset = ax.contour(X, Y, Z, zdir='z', offset=0, cmap=cm.nipy_spectral)
cset = ax.contour(X, Y, Z, zdir='x', offset=0, cmap=cm.nipy_spectral)
cset = ax.contour(X, Y, Z, zdir='y', offset=120, cmap=cm.nipy_spectral)
ax.set_xlim(0, 120)
ax.set_ylim(0, 120)
ax.set_zlim(0, 1)
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
plt.savefig('3d.pdf', dpi=500)
在 Spyder 中显示的绘图是“正确的”,但 PDF 似乎忽略了linewidth=0.
。我该如何解决?
Spyder 输出:
PDF 输出:
【问题讨论】:
这在***.com/questions/17766481/… 之前出现,但不清楚是否已修复 啊,非常感谢!我没找到那个! 【参考方案1】:matplotlib github 认为这是已修复的,但该修复并未进入 v1.4.1,但将被放入 v1.4.3 https://github.com/matplotlib/matplotlib/issues/2247
【讨论】:
谢谢!我现在将我的 matplotlib 更新到最新版本 1.4.3,一切正常!【参考方案2】:正如其他人所指出的,这与 pdf 后端中的错误有关,应该在最新版本的 matplotlib 中解决。
这是一种 hack / 变通方法,可以在旧版本中获得更吸引人的结果。您可以将 edgecolor 显式设置为完全透明:
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
linewidth=0, antialiased=True, edgecolor=(0,0,0,0))
比较结果:
编辑:
正如 cmets 中所指出的,使用 alpha
关键字会覆盖边缘颜色的 alpha 值。因此,我们需要明确定义面部颜色的透明度。我能看到的最简单的方法是调整颜色图:
from matplotlib.colors import LinearSegmentedColormap
colors = np.array(cm.coolwarm(np.linspace(0,1,256)))
colors[:,3] = 0.6
cmap = LinearSegmentedColormap.from_list('alpha_cmap', colors.tolist())
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cmap,
linewidth=0, antialiased=True, edgecolor=(0,0,0,0))
结果:
【讨论】:
万一有人尝试这样做(这似乎可行):除了设置 edgecolor 之外,此修复程序还需要排除 alpha 关键字参数 - 即使 apha=1.0 似乎也无法正常工作。 好点。alpha
关键字覆盖(几乎?)所有 matplotlib 函数中的颜色特定 alpha 值。
@paddyg 我添加了一个如何为面部颜色添加透明度的示例。以上是关于将 3D 表面保存为 pdf 时出现黑线:我怎样才能摆脱它们?的主要内容,如果未能解决你的问题,请参考以下文章
将 Excel 工作表导出到 PDF 文件时出现奇怪的 Powershell 行为
如何解决利用aspose把word文档转换为pdf文档时出现乱码 C#
使用 ImageMagick 将 PNG 文件转换为 PDF 时出现粗糙的边缘
使用 Ghostscript 将 PDF 转换为打印支持的格式时出现“错误:/ioerror in --filter--”