python добавляет значения в Line3DCollection - PullRequest
0 голосов
/ 30 апреля 2019

Я хочу построить несколько линий на 3D-графике.Я строю траекторию светового луча, каждая линия должна быть цветной в зависимости от времени распространения для каждого пути.Я хочу построить их независимо, поскольку я сохранил их в виде двоичной структуры, в которой любой луч может следовать за двумя разными траекториями.

Я использовал Line3DCollection, но это не совсем правильный путь.

В двух словах,

import numpy as np

x = np.linspace(0,1,100)
y = x
z = x
t = np.linspace(0,1,100)

#here I need to plot these points coloring them in function of t

x1 = np.linspace(1,2,100)
y1 = x
z1 = x
t1 = np.linspace(1,2,100)

#I need to plot also this used the same colorbar used for former values

x2 = -np.linspace(1,2,100)
y2 = x
z2 = x
t2 = np.linspace(1,2,100)

#idem

, где все линии окрашены в одну и ту же шкалу цветовых шкал, как на этом сюжете .

Я пытался сследующее, но результат не такой, как я ожидал

import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d.art3d import Line3DCollection

x = np.linspace(0,1,100)
y = x
z = x
t = np.linspace(0,1,100)

points = np.array([x,y,z]).transpose().reshape(-1,1,3)
segs = np.concatenate([points[:-1],points[1:]],axis=1)
lc = Line3DCollection(segs, cmap=plt.get_cmap('jet'))
lc.set_array(t) 

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


x1 = np.linspace(1,2,100)
y1 = x1
z1 = x1
t1 = np.linspace(1,2,100)

points1 = np.array([x1,y1,z1]).transpose().reshape(-1,1,3)
segs1 = np.concatenate([points1[:-1],points1[1:]],axis=1)
lc = Line3DCollection(segs1, cmap=plt.get_cmap('jet'))
lc.set_array(t1)
lc.update_scalarmappable()

ax.add_collection3d(lc)

x2 = np.linspace(1,2,100)
y2 = -x2+2
z2 = -x2+2
t2 = np.linspace(1,2,100)

points2 = np.array([x2,y2,z2]).transpose().reshape(-1,1,3)
segs2 = np.concatenate([points2[:-1],points2[1:]],axis=1)
lc = Line3DCollection(segs2, cmap=plt.get_cmap('jet'))
lc.set_array(t1)
lc.update_scalarmappable()

ax.add_collection3d(lc)

ax.set_xlim(0, 2)
ax.set_ylim(0, 2)
ax.set_zlim(0, 2)
fig.colorbar(lc)
plt.show()

заговор этот заговор

Заранее спасибо

...