我看过this thread,但我的数据有些不同。我想创建一个包含x,y,z坐标和颜色代码的多个文件的3D图,每个文件都具有唯一的颜色,而不是每个点坐标
到目前为止的代码:
import meshio
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import glob
import matplotlib.cm as cm
files = sorted(glob.glob('mesh_files/*.vtk'))
mesh = []
fig = plt.figure(figsize = (16,10))
ax = plt.axes(projection = '3d')
colors = cm.rainbow(np.linspace(0,1,16))
for file in files:
mesh.append(meshio.read(file))
x = [m.points[:,0] for m in mesh]
y = [m.points[:,1] for m in mesh]
z = [m.points[:,2] for m in mesh]
for a,b,c,d in zip(x,y,z,colors):
plt.scatter(a,color=d)
背景
x
,y
和z
都是lists
,包含numpy
arrays
len(x) 16
len(x[0]) 99937
x[0].shape (99937,)
type(x) <class 'list'>
type(x[0]) <class 'numpy.ndarray'>
我认为问题出在colors
上,尺寸可能不匹配
len(colors) 16
len(colors[0]) 4
错误
RuntimeWarning: invalid value encountered in sqrt
编辑:我可以单独调用scatter
并手动输入不同的颜色来创建下面的图,但是这将永远占用10个以上的文件,因此我希望将其放在某种循环或某种函数中。
EDIT2:我能够获得此图,这很不错,因为每个文件的数据的颜色是不同的,但是与第一个图相比,z
比例太小,看起来像数据缺少,它应该像第一张图的z
深度值一样,但是像第二张图一样具有16种独特的颜色。第一幅图只是手动绘制3个文件