我正在尝试渲染表面,但我无法获得漂亮的可视化效果。 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_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)
关于python - 在 matplotlib 中正确渲染 3dplot_surface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34227717/