首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用matplotlib.tri.Triangulation创建Matplotlib的plot_trisurf中的三角剖分

用matplotlib.tri.Triangulation创建Matplotlib的plot_trisurf中的三角剖分
EN

Stack Overflow用户
提问于 2017-07-21 17:34:13
回答 1查看 10K关注 0票数 4

我试图使用matplotlib.tri.Triangulation为matplotlibs plot_trisurf生成三角形。我想指定三角形,而不是matplotlib.tri.Triangulation使用的Delaunay三角剖分,因为它不适用于某些情况,例如xz或yz平面中的三角形。我不知道这是否会解决问题,但我似乎是一个好的尝试。

问题是三角剖分需要一个(n,3)数组,n是三角形的数目。引用matplotlib.org上的页面“对于每个三角形,构成三角形的三个点的索引,按逆时针方向排列。”api.html#matplotlib.tri.Triangulation。我无法辨别如何以正确的形式创建数组,也就是说,如果我想要帮助的话。我很感谢你的帮助。

到目前为止,我已经尝试了一些东西,但下面是我最后一次尝试的样子:

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.tri as mtri

fig = plt.figure()
ax = fig.gca(projection='3d')

x1=0
x2=1
x3=1
x4=0

y1=0
y2=0
y3=2
y4=2

x=[]
y=[]
x.append(x1)
x.append(x2)
x.append(x3)
x.append(x4)
y.append(y1)
y.append(y2)
y.append(y3)
y.append(y4)
z=np.zeros(8)

triang = mtri.Triangulation(x, y, triangles=[[[x1,y1],[x2,y2],[x3,y3]],[[x3,y3],[x4,y4],[x2,y2]]])

ax.plot_trisurf(triang, z, linewidth=0.2, antialiased=True)

ax.view_init(45,-90)
ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.set_zlabel("Z")
ax.set_aspect("equal")

fig.set_size_inches(8,8)

plt.show()
EN

回答 1

Stack Overflow用户

发布于 2017-07-22 09:07:09

matplotlib页面上有一个例子,显示了如何使用点和三角形创建matplotlib.tri.Triangulation。由于这可能是不必要的复杂,我们可能会进一步简化。

让我们拿4分,这应该是两个三角形。triangles参数将以点的索引的形式指定三角形的角。正如文件上说的,

triangles:形状的整数array_like (Ntri3),可选 对于每个三角形,构成三角形的三个点的指数,按逆时针顺序排列。。。

考虑这段代码,其中我们有一个(4,2)数组,指定点坐标,对一行中的每个点都有x和y坐标。然后,我们从他们创建三角形,通过使用应构成三角形逆时针方式的点的因地制宜。

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.tri as mtri

xy = [[0.3,0.5],
      [0.6,0.8],
      [0.5,0.1],
      [0.1,0.2]]
xy = np.array(xy)

triangles = [[0,2,1],
             [2,0,3]]

triang = mtri.Triangulation(xy[:,0], xy[:,1], triangles=triangles)
plt.triplot(triang, marker="o")

plt.show()

第一个三角形由点0, 2, 12,0,3的第二个点组成。下面的图形显示了该代码的可视化。

然后,我们可以创建一个z值列表,并在3D中绘制相同的图。

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.tri as mtri
from mpl_toolkits.mplot3d import Axes3D

xy = [[0.3,0.5],
      [0.6,0.8],
      [0.5,0.1],
      [0.1,0.2]]
xy = np.array(xy)

triangles = [[0,2,1],
             [2,0,3]]

triang = mtri.Triangulation(xy[:,0], xy[:,1], triangles=triangles)

z = [0.1,0.2,0.3,0.4]

fig, ax = plt.subplots(subplot_kw =dict(projection="3d"))
ax.plot_trisurf(triang, z)

plt.show()

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45243563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档