如何使用Python绘制多条3d曲线图片?

如何使用Python绘制多条3d曲线图片?,python,matplotlib,Python,Matplotlib,我想用Python在同一幅画上画两条空间曲线 因此,我使用两个Axes3D.plot来绘制曲线。但最终的图片只显示了最后一张。如果我使用Axes3D.scatter,它可以显示所有点 这是我的代码: from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np import math as mt from mpl_toolkits.mplot3d import Axes3D

我想用Python在同一幅画上画两条空间曲线

因此,我使用两个Axes3D.plot来绘制曲线。但最终的图片只显示了最后一张。如果我使用Axes3D.scatter,它可以显示所有点

这是我的代码:

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


t=2  #t can be changed

fig = plt.figure()
ax=Axes3D(fig)

#data

def unitilize(x,y,z):
    r=mt.sqrt(x**2+y**2+z**2)
    return x/r, y/r, z/r

def g_1(x,y,z):
    x=t*x                
    z=z/t                
    x,y,z=unitilize(x,y,z)
    return x,y,z

stepCnt=10000            ######step 
#########data#################
xs = np.empty((stepCnt + 1,))
ys = np.empty((stepCnt + 1,))
zs = np.empty((stepCnt + 1,))

#Setting initial values
def huatu(x,y,z):   

    xs[0], ys[0], zs[0] =unitilize(x,y,z)

    for i in range(stepCnt):
        xs[i+1],ys[i+1],zs[i+1]=g_1(xs[i], ys[i], zs[i])
    return xs,ys,zs


xs3,ys3,zs3=huatu(1,10,40)
ax.plot(xs3, ys3, zs3, color='b', marker='x')

xs2,ys2,zs2=huatu(1,0,40)
ax.plot(xs2, ys2, zs2, color='r', marker='o')

在您的图像中,它看起来像蓝线在那里,但它隐藏在红线后面(您可以看到蓝色的角从红色圆圈中伸出)。尝试更改蓝线中的数据,您应该可以看到它。

我没有足够的代表发表评论。非常感谢!我找到了解决办法。我应该把'xs=np.empty((stepCnt+1,)'放在我的函数'huatu'中,以便xs2和xs3有不同的数据。但我不知道这是怎么发生的@M.JXu看起来您在
huatu
函数中重用
xs
ys
zs
。在第一次调用函数后,它已经将这些值设置为计算值。所以第二次调用它时,它只是重复使用以前计算的值。用
np.empty
清除变量将删除以前的值。我建议将
xs=np.empty(strpCnt+1)
行移动到
huatu
函数中。没有必要将其排除在该范围之外。