python - 用于时变颜色的 Matplotlib Line3DCollection

标签 python matplotlib plot mplot3d

我正在尝试绘制随时间演变的 3D 线轨迹,我希望颜色发生变化以显示时间的流逝(例如,从浅蓝色到深蓝色)。但是,明显缺乏使用 matplotlib 的 Line3DCollection 的教程; this is the closest我能找到,但我得到的只是一条白线。

这是我的代码。

import matplotlib.pyplot as plot
from mpl_toolkits.mplot3d.axes3d import Axes3D
from mpl_toolkits.mplot3d.art3d import Line3DCollection
import numpy as np

# X has shape (3, n)
c = np.linspace(0, 1., num = X.shape[1])[::-1]
a = np.ones(shape = c.shape[0])
r = zip(a, c, c, a) # an attempt to make red vary from light to dark

# r, which contains n tuples of the form (r,g,b,a), looks something like this:
# [(1.0, 1.0, 1.0, 1.0), 
# (1.0, 0.99998283232330165, 0.99998283232330165, 1.0),
# (1.0, 0.9999656646466033, 0.9999656646466033, 1.0),
# (1.0, 0.99994849696990495, 0.99994849696990495, 1.0),
# ..., 
# (1.0, 1.7167676698312416e-05, 1.7167676698312416e-05, 1.0),
# (1.0, 0.0, 0.0, 1.0)]

fig = plot.figure()
ax = fig.gca(projection = '3d')

points = np.array([X[0], X[1], X[2]]).T.reshape(-1, 1, 3)
segs = np.concatenate([points[:-1], points[1:]], axis = 1)
lc = Line3DCollection(segs, colors = r)
ax.add_collection3d(lc)

ax.set_xlim(-0.45, 0.45)
ax.set_ylim(-0.4, 0.5)
ax.set_zlim(-0.45, 0.45)

plot.show()

然而,这是我得到的:

3d temporal color change plot

只是一堆白色的线段,颜色没有变化。我究竟做错了什么?谢谢!

最佳答案

您的代码运行良好,这里有一些示例。基本上,这是带有自定义 X 集的代码。

fig = plot.figure();
ax = fig.gca(projection = '3d')
X = [(0,0,0,1,0),(0,0,1,0,0),(0,1,0,0,0)]
points = np.array([X[0], X[1], X[2]]).T.reshape(-1, 1, 3)
r = [(1.0, 1.0, 1.0, 1.0), (1.0, 0.75, 0.75, 1.0), (1.0, 0.5, 0.5, 1.0), (1.0, 0.25, 0.25, 1.0), (1.0, 0.0, 0.0, 1.0)];

segs = np.concatenate([points[:-1], points[1:]], axis = 1)
ax.add_collection(Line3DCollection(segs,colors=list(r)))

plot.show()

剧情是这样的:

enter image description here

关于python - 用于时变颜色的 Matplotlib Line3DCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22078256/

相关文章:

python - 读取包含特定工作表且仅选定列的在线 Excel 文件

Python 3 使用 Matplotlib 添加颜色条

python - 如何在 matplotlib python 的白色背景上以不同的随机颜色显示对象?

r - 如何使用 ggplot2 绘制具有 (x,y,r,g,b) 坐标的图像?

r - ggplot GLM 拟合曲线,无交互作用

python - 如果我使用 virtualenv,为什么还要使用 vagrant?

python - Kivy:固定值(value)的属性(property)

Python:如何使用字符串索引( '[0][1][0]')作为多维数组的索引

python - 在线图中放置间隙/中断

Matlab如何制作平滑的等高线图?