【问题标题】:Python - Line colour of 3D parametric curvePython - 3D 参数曲线的线条颜色
【发布时间】:2014-05-28 15:43:29
【问题描述】:

我有 2 个列表 tab_x(包含 x 的值)和 tab_z(包含 z 的值),它们的长度相同,值为是的

我想绘制一条由 z 值着色的 3D 曲线。我知道它可以绘制为 2D 图,但我想绘制其中一些具有不同 y 值的图进行比较,所以我需要它是 3D。

我的 tab_z 也包含负值

我在question 中找到了按时间(索引)为曲线着色的代码,但我不知道如何转换此代码以使其适用于我的情况。

感谢您的帮助。

我添加我的代码更具体:

fig8 = plt.figure()
ax8 = fig8.gca(projection = '3d')
tab_y=[]
for i in range (0,len(tab_x)):
  tab_y.append(y)
ax8.plot(tab_x, tab_y, tab_z)

我现在有这个

我试过这段代码

for i in range (0,len(tab_t)):
    ax8.plot(tab_x[i:i+2], tab_y[i:i+2], tab_z[i:i+2],color=plt.cm.rainbow(255*tab_z[i]/max(tab_z)))

彻底失败:

【问题讨论】:

    标签: python matplotlib mplot3d colormap


    【解决方案1】:

    您的第二次尝试几乎成功了。唯一的变化是colormap cm.jet() 的输入需要在 0 到 1 的范围内。您可以使用 Normalize 缩放 z 值以适应此范围。

    import numpy as np
    from matplotlib import pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    from matplotlib import colors
    
    fig = plt.figure()
    ax = fig.gca(projection='3d')
    
    N = 100
    y = np.ones((N,1))
    x = np.arange(1,N + 1)
    z = 5*np.sin(x/5.)
    
    cn = colors.Normalize(min(z), max(z)) # creates a Normalize object for these z values
    for i in xrange(N-1):
        ax.plot(x[i:i+2], y[i:i+2], z[i:i+2], color=plt.cm.jet(cn(z[i])))
    
    plt.show()
    

    【讨论】:

    猜你喜欢
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    相关资源
    最近更新 更多