使用matplotlib连续3d绘图

时间:2015-05-06 20:23:07

标签: python matplotlib plot 3d

我正在开发一个需要使用matplotlib进行连续3D绘图的项目。 整个项目很复杂,但我用这个简单的例子总结了问题:

import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import time


count=0
fig = plt.figure()
ax = fig.gca(projection='3d')
z = [0]
x = [0]
y = [0]
plt.show()
while True:
    count +=1
    x.append(count)
    x.append(count)
    x.append(count)
    ax.plot(x, y, z)
    time.sleep(1)
    plt.draw()

在此代码中,我尝试使用新的x,y,z值重新绘制3D线。但没有任何反应!

1 个答案:

答案 0 :(得分:1)

我不知道为什么它的编码方式不起作用,但我可以这样工作:

import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import time
import numpy


count=0
fig = plt.figure()
ax = fig.gca(projection='3d')
z = [0]
x = [0]
y = [0]

plt.ion()    ###

plt.show()
while True:
    count +=1
    x.append(count)
    y.append(count**2) #
    z.append(count**3) # just for eye-candy

    ax.plot(numpy.array(x),    ###
            numpy.array(y),    ###
            numpy.array(z))    ###

    time.sleep(1)
    plt.draw()

ion部分是有道理的,但是在这里将序列转换为数组是必要的,因为由于(显然)矩阵乘法不可能通过简单的序列得到错误:

(...)
File "C:\Python27\lib\site-packages\mpl_toolkits\mplot3d\proj3d.py", line     158, in proj_transform_vec
    vecw = np.dot(M, vec)
TypeError: can't multiply sequence by non-int of type 'float'