繁体   English   中英

在matplotlib中正确渲染3d plot_surface

[英]Properly rendered 3d plot_surface in matplotlib

我正在尝试渲染表面,但是无法获得漂亮的可视化效果。 matplotlibplot_surface函数为我提供了下图:

plot_surface

由下面的代码产生。 如果仔细观察,如何摆脱这种透明度和仍然可见的线框?

import numpy as np
import matplotlib.pyplot as pl
from mpl_toolkits.mplot3d import Axes3D
pl.ion()

nx = 512
ny = 512

Lx = 2.e6
Ly = 2.e6

x = np.linspace(0., Lx, nx)
y = np.linspace(0., Ly, ny)

xx, yy = np.meshgrid(x,y)

Ld = 6.e4
h = np.exp(-( (xx - 0.5*Lx)**2 + (yy - 0.5*Ly)**2) / Ld**2 )

pl.figure()
ax = pl.subplot(111, projection='3d')
ax.plot_surface(xx/1000., yy/1000., h, alpha=1., cstride=1, rstride=1, linewidth=0)
ax.set_zlim3d(-0.2, 1.)

这只是一个解决方法,但是它适用于大多数matplotlib例程,例如, contourf (之前我遇到过相同的问题); 两次调用plot例程(在本例中为plot_surface )解决了两个问题:

在此处输入图片说明

左图调用一次plot_surface ,右图调用两次。

对于不透明的表面,设置antialiased=False可以帮助(下图左),设置透明度antialiased=True可以在多边形边缘产生非常细的线(我怀疑是因为多边形稍微重叠了),但是几乎看不见(下面的右图) )。

在此处输入图片说明

fig = pl.figure()
ax = pl.subplot(121, projection='3d')
surf = ax.plot_surface(xx/1000., yy/1000., h, alpha=1.0, cstride=1, rstride=1, linewidth=0, antialiased=False)

ax = pl.subplot(122, projection='3d')
surf = ax.plot_surface(xx/1000., yy/1000., h, alpha=0.3, cstride=1, rstride=1, linewidth=0, antialiased=True)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM