繁体   English   中英

使用mplot3d绘制3D网格

[英]Plot 3D mesh using mplot3d

从包含3D曲面的点坐标的文本文件开始,根据以下示例,该曲面由于施加在其上的压力和施加的压力值而变形:

  Node_label X_in Y_in Z_in X_def Y_def Z_def Press 11542 15229 17734 18332 11.4645 67.7709 138.905 4.97573E-03 11543 3283 3238 16784 7.73624 67.3238 138.781 13.2628E-03 11540 13506 13385 17482 18.9023 67.6291 139.051 3.61705E-03 11541 7637 7516 18637 15.2164 68.0038 139.031 12.7343E-03 11546 16137 16651 16886 -2.98896 66.1776 138.431 19.0185E-03 11547 7360 7361 16903 -6.42838 65.3547 138.177 2.74949E-03 .... .... .... .... .... .... .... .... 

我正在尝试使用mplot3d库绘制3D表面及其变形,以及变形表面上压力的彩色轮廓图。 这是我的代码:

from Tkinter import Tk
from tkFileDialog import askopenfilename, asksaveasfile
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import numpy as np

Tk().withdraw() 

f_in = askopenfilename(title='Choose the TXT file') 

x_in = []
y_in = []
z_in = []
x_def = []
y_def = []
z_def = []
cpress = []

with open(f_in,"r") as f0:
     for ind, line in enumerate(f0):
          if ind > 2:
               item = line.strip()

               if item:
                    item = item.split()

               x_in.append(item[0])
               y_in.append(item[1])
               z_in.append(item[2])
               x_def.append(item[3])
               y_def.append(item[4])
               z_def.append(item[5])
               cpress.append(item[6])

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

x_in = np.asarray(x_in)
y_in = np.asarray(y_in)
z_in = np.asarray(z_in)

surf = ax.plot_surface(x_in, y_in, z_in, cmap=cm.coolwarm,
                       linewidth=0, antialiased=False)
plt.show()

但这并没有说明任何事情。

来自@ImportanceOfBeingErnest的评论,使用plot_trisurf

[...]
with open(f_in,"r") as f0:
    for ind, line in enumerate(f0):
        if ind > 2:
            item = line.strip()
            if item:
                item = item.split()
                #Node_label = item[0]
                x_in.append(item[1])
                y_in.append(item[2])
                z_in.append(item[3])
                x_def.append(item[4])
                y_def.append(item[5])
                z_def.append(item[6])
                cpress.append(item[7])

# type is important to convert strings to numbers:
x_in = np.asarray(x_in, dtype=np.float64)
y_in = np.asarray(y_in, dtype=np.float64)
z_in = np.asarray(z_in, dtype=np.float64)

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

points = ax.scatter(x_in, y_in, z_in, cmap=cm.coolwarm, antialiased=False)

surface = ax.plot_trisurf(x_in, y_in, z_in, cmap=cm.coolwarm, antialiased=False)

fig.tight_layout()
fig.show()

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM