python - 在 matplotlib 中正确渲染 3dplot_surface

标签 python matplotlib 3d surface

我正在尝试渲染表面,但我无法获得漂亮的可视化效果。 matplotlib 中的 plot_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_surface)两次可以解决这两个问题:

enter image description here

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

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

enter image description here

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/

相关文章:

c++ - GLSL 中光线行进曲面的实现

python - Pytorch 预期为 1D 张量,但得到了 2D 张量

python - 帮助避免 python/django 错误的工具或技术

python - Matplotlib 在 pandas 数据帧上使用 `scatter_matrix` 堆积直方图

python - Pandas 在一个轴上压扁了图

c++ - 在执行点积之前对 vector 进行归一化?

iphone - 在 OpenGL ES 2.0 中切换着色器是否会影响性能?

python - 如果有空白 DataFrame 则 reduce() 合并

Python Netcat 代码,模块 main()

python - 有没有一种方法可以绘制一侧带有圆弧的 matplotlib 补丁矩形?