在3D Matplotlib线颜色

问题描述 投票:1回答:1

我喜欢情节是这样,这表明沿空间线趋势:

您可以使用代码,如以下matplotlib生成它们:

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

x = np.linspace(0,1,10)
y = np.random.random((10,))
t = np.linspace(0,1,10)

# set up a list of (x,y) points
points = np.array([x,y]).transpose().reshape(-1,1,2)
print(points.shape)  # Out: (len(x),1,2)

# set up a list of segments
segs = np.concatenate([points[:-1],points[1:]],axis=1)
print(segs.shape)  # Out: ( len(x)-1, 2, 2 )
                  # see what we've done here -- we've mapped our (x,y)
                  # points to an array of segment start/end coordinates.
                  # segs[i,0,:] == segs[i-1,1,:]

# make the collection of segments
lc = LineCollection(segs, cmap=plt.get_cmap('jet'))
lc.set_array(t) # color the segments by our parameter

# plot the collection
plt.gca().add_collection(lc) # add the collection to the plot
plt.xlim(x.min(), x.max()) # line collections don't auto-scale the plot
plt.ylim(y.min(), y.max())

plt.show()

结果:

2d plot with a coloured line

但是,我们怎么能去到三维(3D)?

3d line plot

python matplotlib 3d time-series
1个回答
2
投票

以下工作:

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

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

# generate a list of (x,y,z) points
points = np.array([x,y,z]).transpose().reshape(-1,1,3)
print(points.shape)  # Out: (len(x),1,3)

# set up a list of segments
segs = np.concatenate([points[:-1],points[1:]],axis=1)
print(segs.shape)  # Out: ( len(x)-1, 2, 3 )
                  # see what we've done here -- we've mapped our (x,y,z)
                  # points to an array of segment start/end coordinates.
                  # segs[i,0,:] == segs[i-1,1,:]

# make the collection of segments
lc = Line3DCollection(segs, cmap=plt.get_cmap('jet'))
lc.set_array(t) # color the segments by our parameter

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

其结果:

Coloured lines in 3D

© www.soinside.com 2019 - 2024. All rights reserved.