【问题标题】:Line colour of 3D curve from an array with matplotlib使用 matplotlib 的数组中的 3D 曲线的线条颜色
【发布时间】:2016-10-17 19:04:34
【问题描述】:

我想在 Z 转弯处绘制一条由不同颜色的点组成的 3D 线。 我将 Visual Studio 2013 与 Python 一起使用,我必须读取一个 .json(XML 样式)文件并将其(X、Y、Z)绘制到 3D 图表中。 所以我得到了一种颜色的曲线: 我想要这样:

我有一个 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,但找不到解决方案。

【问题讨论】:

    标签: python numpy matplotlib 3d mplot3d


    【解决方案1】:

    看看里面的例子和cmets:

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

    在你的代码循环中必须是这样的:

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

    【讨论】:

    • aaaarrrggg ...这很容易。非常感谢您的回答。所以现在我的代码看起来像:for i in xrange(1,N): a = (1.*i/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(a)) 但现在我的代码需要 10000 点 1 分钟来构建图形。你现在想知道更快的方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    相关资源
    最近更新 更多