2017-08-18 15 views
1

私は2Dでの散乱アニメーションのため、この作業コード持っている:私はこれを3Dに変換しようとしたが、それ文句を言わない仕事散布図matplotlibの2D> 3D

import matplotlib.pyplot as plt 
import matplotlib.animation as animation 
def _update_plot(i, fig, scat): 
    scat.set_offsets(([0, i], [50, i], [100, i])) 
    return scat, 
fig = plt.figure() 
x = [0, 50, 100] 
y = [0, 0, 0] 
ax = fig.add_subplot(111) 
ax.set_xlim([-50, 200]) 
ax.set_ylim([-50, 200]) 
scat = plt.scatter(x, y, c=x) 
scat.set_alpha(0.8) 
anim = animation.FuncAnimation(fig, _update_plot, fargs=(fig, scat), frames=100, interval=100) 
plt.show() 

を...

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


def _update_plot(i, fig, scat): 
    scat._offsets3d([0, 0, 0], [50, 0, 0], [100, 0, 0]) 

    return scat 

fig = plt.figure() 

x = [0, 50, 100] 
y = [0, 0, 0] 
z = [0, 0, 0] 

ax = fig.add_subplot(111, projection='3d') 

scat = ax.scatter(x, y, z) 

anim = animation.FuncAnimation(fig, _update_plot, fargs=(fig, scat), frames=100, interval=100) 

plt.show() 

缶誰かが私にこれを解決するためのアドバイスをくれていますか? ありがとうございます

答えて

1

_offsets3dは属性であり、方法ではありません。代わりに

scat._offsets3d([0, 0, 0], [50, 0, 0], [100, 0, 0]) 

のあなたはそれに(x,y,z)値のタプルを割り当てる必要があります:

scat._offsets3d = ([0, 0, 0], [50, 0, 0], [100, 0, 0]) 

これはもちろん、常にすべての100のフレームの同じプロットを生成します。だからアニメを見るためには、

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


def _update_plot(i, fig, scat): 
    scat._offsets3d = ([0, i, i], [50, i, 0], [100, 0, i]) 
    return scat 

fig = plt.figure() 

x = [0, 50, 100] 
y = [0, 0, 0] 
z = [0, 0, 0] 

ax = fig.add_subplot(111, projection='3d') 

scat = ax.scatter(x, y, z) 

ax.set_xlim(0,100) 
ax.set_ylim(0,100) 
ax.set_zlim(0,100) 

anim = animation.FuncAnimation(fig, _update_plot, fargs=(fig, scat), frames=100, interval=100) 

plt.show()