gpt4 book ai didi

python - Matplotlib "patch"类似 3D 三角形网格的函数

转载 作者:行者123 更新时间:2023-12-01 09:16:56 25 4
gpt4 key购买 nike

我想使用 MATPLOTLIB 绘制 3D 有限元网格。我在使用 MAYAVI 时遇到一些问题,所以 this此类解决方案不适用。

我需要像Matlab“patch”函数这样的东西,如下所示:

x = [0.0, 1.0, 0.0];
y = [0.0, 0.0, 1.0];
z = [0.0, 1.0, 1.0];
v = 100.0;
view(3)
patch(x, y, z, v)
hold on;
x = [1.0, 1.0, 0.0];
y = [0.0, 1.0, 1.0];
z = [1.0, 0.0, 1.0];
v = 50.0;
patch(x, y, z, v)

在此代码中,“v”是在每个三角形中心计算的标量场。它产生下面的图像。 Matlab pathc for 3D data.

最佳答案

enter image description here

以下代码会产生类似的结果,但您需要使用一些参数(颜色图、归一化范围(vmin、vmax)、视角、轴刻度位置)以获得您想要的结果:

import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection


def patch(ax, x, y, z, v, vmin=0, vmax=100, cmap_name='viridis'):
cmap = mpl.cm.get_cmap(cmap_name) # Get colormap by name
c = cmap(mpl.colors.Normalize(vmin, vmax)(v)) # Normalize value and get color
pc = Poly3DCollection([list(zip(x,y,z))]) # Create PolyCollection from coords
pc.set_facecolor(c) # Set facecolor to mapped value
pc.set_edgecolor('k') # Set edgecolor to black
ax.add_collection3d(pc) # Add PolyCollection to axes
return pc

def view(ax, code):
if code == 2: #view(2) sets the default two-dimensional view, az = 0, el = 90.
ax.view_init(90, 0) # (args are reversed from MATLAB)

if code == 3: #view(3) sets the default three-dimensional view, az = –37.5, el = 30.
ax.view_init(30, -37.5)


fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

x = [0.0, 1.0, 0.0];
y = [0.0, 0.0, 1.0];
z = [0.0, 1.0, 1.0];
v = 100.0;

patch(ax, x, y, z, v)

x = [1.0, 1.0, 0.0];
y = [0.0, 1.0, 1.0];
z = [1.0, 0.0, 1.0];
v = 50.0;
patch(ax, x, y, z, v)

view(ax, 3)
plt.show()

产品:

enter image description here

(旋转答案顶部的图像以获得与问题中的图像类似的 View ,因为有些东西似乎不对劲)。

关于python - Matplotlib "patch"类似 3D 三角形网格的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51164291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com