python的matplotlib.pyplot中3D参数曲线的线条颜色

Ian*_*cks 16 python matplotlib

我一直在谷歌搜索没有成功...也许我的关键字只是糟糕.无论如何,假设我有三个numpy.ndarray相同长度的1D ,我想将它们绘制成3D轨迹.此外,我希望能够做以下任何一件事:

  1. 根据函数更改线条的颜色 z
  2. 将行的颜色更改为时间的函数(即数组中的索引)

这个演示有一个制作这样一条曲线的例子:

import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.gca(projection='3d')
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
ax.plot(x, y, z)

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是我如何实现12?欢迎只有一个或另一个的解决方案!提前致谢.

ask*_*han 17

与普通的2d图一样,沿着普通线不能有渐变的颜色.但是,你可以用scatter:

import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.gca(projection='3d')
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)

#1 colored by value of `z`
ax.scatter(x, y, z, c = plt.cm.jet(z/max(z))) 

#2 colored by index (same in this example since z is a linspace too)
N = len(z)
ax.scatter(x, y, z, c = plt.cm.jet(np.linspace(0,1,N)))

plt.show()
Run Code Online (Sandbox Code Playgroud)

我喜欢@Junuxx的 黑客,所以我在这里应用它:

for i in xrange(N-1):
    ax.plot(x[i:i+2], y[i:i+2], z[i:i+2], color=plt.cm.jet(255*i/N))
Run Code Online (Sandbox Code Playgroud)

索引2色 按索引划分的2色线

  • 颜色规范似乎需要 `int(255/N*i)`。对我来说,浮点数会导致颜色图的最大值。 (2认同)

Jun*_*uxx 12

您可以单独绘制每个线段,如下所示.这只是循环超过6种预定义的颜色,因为@ askewchan的答案已经很好地展示了如何使用色彩映射.

cols = 'rgbcmy'

for i in range(len(x)-1):
    ax.plot(x[i:i+2], y[i:i+2], z[i:i+2], color=cols[i%6])
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述