首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将3D表面保存为pdf时出现黑线:如何摆脱它们?

将3D表面保存为pdf时出现黑线:如何摆脱它们?
EN

Stack Overflow用户
提问于 2015-04-23 19:46:00
回答 2查看 642关注 0票数 3

我有以下使用ax.plot_surface显示3D表面的代码

代码语言:javascript
复制
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输出:

EN

回答 2

Stack Overflow用户

发布于 2015-04-23 20:00:24

matplotlib github认为这个问题已经解决了,但是这个修复没有出现在v1.4.1中,但是将会出现在v1.4.3 https://github.com/matplotlib/matplotlib/issues/2247

票数 3
EN

Stack Overflow用户

发布于 2015-04-23 20:32:00

正如其他人所指出的,这与pdf后端的一个bug有关,这个问题应该在matplotlib的最新版本中解决。

这是一种破解/变通方法,在旧版本中也能获得稍微更吸引人的结果。可以将edgecolor显式设置为完全透明:

代码语言:javascript
复制
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
        linewidth=0, antialiased=True, edgecolor=(0,0,0,0))

比较结果:

编辑:

正如注释中指出的,使用alpha关键字会覆盖边缘颜色的Alpha值。因此,我们需要显式地定义面部颜色的透明度。我所能看到的最简单的方法是调整颜色映射:

代码语言:javascript
复制
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))

结果:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29822498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档