python将值添加到Line3DCollection

时间:2019-04-30 14:46:18

标签: python matplotlib line

我想在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

所有线条都以相同的色标比例着色 plot

我尝试了以下操作,但输出与预期的不同

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()

绘图this plot

预先感谢

0 个答案:

没有答案