Matplotlib 3D绘图不正确

2 投票
1 回答
556 浏览
提问于 2025-04-17 09:47

我在用MatPlotLib画3D图的时候遇到了一个问题。 我运行下面的代码时,所有的线条都被画到了y的最后一个值上??? 尽管在循环中y的值是正确增加的。 希望能有人帮我理解这个问题。 谢谢, 大卫

#========== Code Start=================
import numpy as np
import matplotlib
from matplotlib.figure import Figure
import pylab as plt
from mpl_toolkits.mplot3d import Axes3D


fig = plt.figure()
ax = Axes3D(fig)
x=np.arange(5)
y=np.zeros(len(x))

for i in range(1,10):
    y.fill(i)
    z=plt.randn(len(y))
    ax.plot(xs=x, ys=y, zs=z)#, zdir='z', label='ys=0, zdir=z')
    plt.draw()
    print i,len(y),y,x,z
plt.xlabel('X') 
plt.ylabel('Y')
plt.zlabel('Z')   
plt.show()
#========== Code End=================

1 个回答

1

看起来y可能被所有的图形引用了。所以当你执行ax.plot的时候,你其实是在传递y的引用。每次传递的都是同一个引用,但每次的值都不一样。当执行plt.show()的时候,y的引用被使用,而此时y的值已经是9了。因此,你需要在每次传递时创建一个不同的y对象,并为它设置你想要的值:

y = np.zeros(len(x))
y.file(i)

可能有一个numpy的命令可以一次性填充你想要的值,但你明白我的意思了。

撰写回答