Я видел эту ветку , но мои данные немного отличаются. Я хочу создать трехмерный график из нескольких файлов, содержащих координаты x, y, z и цветовой код каждого файла с уникальным цветом, а не каждой координат точки
Код до настоящего времени:
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,b,c,color=d)
Фон
x
, y
и z
- все lists
, содержащие numpy
arrays
<< <code>len(x)
16
<< <code>len(x[0])
99937
<< <code>x[0].shape
(99937,)
<< <code>type(x)
<class 'list'>
<< <code>type(x[0])
<class 'numpy.ndarray'>
Я считаю, что проблема заключается вс colors
и возможным несоответствием размеров
<< <code>len(colors)
16
<< <code>len(colors[0])
4
Ошибка
RuntimeWarning: invalid value encountered in sqrt
РЕДАКТИРОВАТЬ: я могу индивидуально позвонить scatter
и вручную ввести другой цвет, чтобы создать график ниже, но это будет длиться вечно с10+ файлов, поэтому я хочу, чтобы это было в цикле или какой-то функции.
РЕДАКТИРОВАТЬ 2: Мне удалось получить этот график, и это хорошо, что цвета различны для данных каждого файла, но масштаб z
слишком мал по сравнениюна первый график, и похоже, что данные отсутствуют, он должен быть похож на первый график с точки зрения значений глубины z
, но с 16 уникальными цветами, как на втором графике. На первом графике отображаются только 3 файла вручную