[英]Properly rendered 3d plot_surface in matplotlib
我正在尝试渲染表面,但是无法获得漂亮的可视化效果。 matplotlib
的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.