散点图Matplotlib 2D> 3D

时间:2017-08-18 12:51:55

标签: python numpy matplotlib

我在2D中有散射动画的工作代码:

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()

我尝试将其转换为3D,但它无法正常工作..

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 个答案:

答案 0 :(得分: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()