26

plt.show()散布図を設定して思い通りにプロットしました。視点を使用してドラッグしたかのように、空間で回転するフィギュアの .mp4 ビデオを作成したいと考えています。

この答えは、画像のフォルダーを使用して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")
4

4 に答える 4

1

Viktor Kerkezが提供する解決策は私には機能しません (matplotlib バージョン 3.4.2)。user3015729によるレポートと同じエラーが発生します。以下は、同じ結果を生成するが、matplotlib 3.4.2 で動作する適合バージョンです。

# 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)
scat = ax.scatter(xx, yy, zz, marker='o', s=20, c="goldenrod", alpha=0.6)

# 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.view_init(elev=10., azim=0)
    return [scat]


def animate(i):
    ax.view_init(elev=10., azim=i)
    return [scat]


# 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'])
于 2021-06-29T09:47:55.283 に答える