使用matplotlib从数组中获取3D曲线的线条颜色

时间:2016-06-16 10:12:16

标签: python numpy matplotlib 3d mplot3d

我想在Z转弯中绘制不同颜色的3D线。 我使用Visual Studio 2013和Python,我必须读取.json(XML样式)文件并将其绘制(X,Y,Z)到3D图表。 所以我得到了一种颜色的曲线: enter image description here 我希望这样: enter image description here

我有一个3维numpy数组,但是当我写下这段代码时,就像链接的答案一样,所以我收到了一个错误:

  

类型对象  numpy.float64'没有len()(VS2013说)

我的代码简称:

matrix_array = [[0,0,0]]
...
-> write data in array
....
matrix_array = np.array(matrix_array)

fig = pyplot.figure()
ax3d = fig.add_subplot(111, projection='3d')
N = len(matrix_array[:,2]) # Z (N now about 14689)
for i in xrange(N-2):
    ax3d.plot(matrix_array[i+2,0],matrix_array[i+2,1],matrix_array[i+2,2], color=pyplot.cm.jet(255*i/N))

当我取消颜色'颜色'所以我得到了我的蓝色曲线,颜色为'颜色'我收到了错误:

  

类型对象  numpy.float64'没有len()(VS2013说)。

所以我读了matplotlib的API,但我找不到解决方案。

1 个答案:

答案 0 :(得分:1)

查看示例和评论:

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

N = 100 # number of points
x = np.arange(N, dtype=float) # x,y,z = 1d arrays
y = x * x
z = np.random.rand(N)

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

# you have to plot segments, its means your arguments
# have to be a slice of arrays like here: from x(i-1) to x(i) => x[i-1:i+1]
# to get color from colormap use index: 0 <= i <= 1
for i in xrange(1,N):
    ax.plot(x[i-1:i+1], y[i-1:i+1], z[i-1:i+1], c = plt.cm.jet(1. * i / N))

plt.show()

{{3}}

在你的代码周期中必须像:

for i in xrange(1,N):
    ax3d.plot(matrix_array[i-1:i+1,0],matrix_array[i-1:i+1,1],matrix_array[i-1:i+1,2], color=pyplot.cm.jet(1.*i/N))