在matplotlib中为旋转的3D图形设置动画

Nat*_*ate 22 python animation matplotlib

我有一个散点图设置并按照我想要的方式绘制,我想创建一个在空间中旋转的图形的.mp4视频,好像我已经使用plt.show()并拖动了周围的视点.

这个答案几乎就是我想要的,除了保存电影我必须手动调用带有图像文件夹的FFMpeg.我宁愿使用Matplotlib的内置动画支持,而不是保存单独的帧.代码转载如下:

from mpl_toolkits.mplot3d import Axes3D
ax = Axes3D(fig)
ax.scatter(xx,yy,zz, marker='o', s=20, c="goldenrod", alpha=0.6)
for ii in xrange(0,360,1):
    ax.view_init(elev=10., azim=ii)
    savefig("movie"%ii+".png")
Run Code Online (Sandbox Code Playgroud)

Vik*_*kez 31

如果您想了解有关matplotlib动画的更多信息,请务必遵循本教程.它详细解释了如何创建动画图.

注意:需要ffmpegmencoder要安装创建动画图.

这是他的第一个示例的一个版本更改为与您的散点图一起使用.

# First import everthing you need
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
from mpl_toolkits.mplot3d import Axes3D

# Create some random data, I took this piece from here:
# http://matplotlib.org/mpl_examples/mplot3d/scatter3d_demo.py
def randrange(n, vmin, vmax):
    return (vmax - vmin) * np.random.rand(n) + vmin
n = 100
xx = randrange(n, 23, 32)
yy = randrange(n, 0, 100)
zz = randrange(n, -50, -25)

# Create a figure and a 3D Axes
fig = plt.figure()
ax = Axes3D(fig)

# Create an init function and the animate functions.
# Both are explained in the tutorial. Since we are changing
# the the elevation and azimuth and no objects are really
# changed on the plot we don't have to return anything from
# the init and animate function. (return value is explained
# in the tutorial.
def init():
    ax.scatter(xx, yy, zz, marker='o', s=20, c="goldenrod", alpha=0.6)
    return fig,

def animate(i):
    ax.view_init(elev=10., azim=i)
    return fig,

# Animate
anim = animation.FuncAnimation(fig, animate, init_func=init,
                               frames=360, interval=20, blit=True)
# Save
anim.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264'])
Run Code Online (Sandbox Code Playgroud)

  • 这需要在`init`和`animate`中`return()`以便不崩溃 (4认同)
  • 当我复制此代码并将其粘贴到 IDLE 中时,出现以下错误,有人知道吗?文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/matplotlib/animation.py”,第 1260 行,位于 <setcomp>axes = {a.axes for a in arts}类型错误:不可散列的类型:“列表” (2认同)

Jam*_*bbs 9

当我偶然发现这个时,我正在研究使用matplotlib动画我的情节:http: //zulko.wordpress.com/2012/09/29/animate-your-3d-plots-with-pythons-matplotlib/

它提供了简单的功能,可以围绕绘图和多种格式的输出进行动画处理.