在matplotlib中删除没有间隙的线框plot_trisurf

时间:2016-07-01 04:54:28

标签: python matplotlib

我想使用matplotlib / pyplot创建一个平滑的圆柱体。我已经在线修改了一个教程并制作了以下最小的例子:

from numpy import meshgrid,linspace,pi,sin,cos,shape
from matplotlib import pyplot
import matplotlib.tri as mtri
from mpl_toolkits.mplot3d import Axes3D

u,v = meshgrid(linspace(0,10,10),linspace(0,2*pi,20))
u = u.flatten()
v = v.flatten()

x = u
z = sin(v)
y = cos(v)

tri = mtri.Triangulation(u, v)

fig = pyplot.figure()
ax = fig.add_axes([0,0,1,1],projection='3d')
ax.plot_trisurf(x,y,z,triangles=tri.triangles,linewidth=0)

pyplot.show()

产生cylinder。我设置linewidth = 0来移除线框,但是,现在存在线框的“重影”,因为三角测量(假设)已经间隔,假设线框在那里填充间隙。这看起来特定于plot_trisurf,因为还有其他3d绘图示例(例如,using plot_surface)设置linewidth = 0而没有出现这些间隙。

做一个mtri.Triangulation?,似乎可能无法“完美地”填补空白,因为它声明

>Notes
> -----
> For a Triangulation to be valid it must not have duplicate points,
> triangles formed from colinear points, or overlapping triangles.

一个部分解决方案是只为线框着色相同的蓝色阴影,但在我解决了这个问题后,我还想在表面上添加一个光源/阴影,这会让我回到正方形。 有没有办法让这项工作?或者有人可以提出不同的方法吗?谢谢你的帮助。

1 个答案:

答案 0 :(得分:-1)

ax.plot_trisurf(x,y,z,triangles=tri.triangles,linewidth=0, antialiased=False)