新しいアニメーションモジュールを使った簡単な例です。
これは少し複雑ですが、これはあなたにファンシーなことをするためのフレームワークを与えるはずです。
OSXでOSXバックエンドを使用している場合は、下記のFuncAnimation
初期化でblit=True
からblit=False
に変更する必要があります。 OSXバックエンドは、blittingを完全にサポートしていません。パフォーマンスは低下しますが、blittingを無効にしてOSX上で正しく動作させる必要があります。単純例えば
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
class AnimatedScatter(object):
"""An animated scatter plot using matplotlib.animations.FuncAnimation."""
def __init__(self, numpoints=50):
self.numpoints = numpoints
self.stream = self.data_stream()
# Setup the figure and axes...
self.fig, self.ax = plt.subplots()
# Then setup FuncAnimation.
self.ani = animation.FuncAnimation(self.fig, self.update, interval=5,
init_func=self.setup_plot, blit=True)
def setup_plot(self):
"""Initial drawing of the scatter plot."""
x, y, s, c = next(self.stream)
self.scat = self.ax.scatter(x, y, c=c, s=s, animated=True)
self.ax.axis([-10, 10, -10, 10])
# For FuncAnimation's sake, we need to return the artist we'll be using
# Note that it expects a sequence of artists, thus the trailing comma.
return self.scat,
def data_stream(self):
"""Generate a random walk (brownian motion). Data is scaled to produce
a soft "flickering" effect."""
data = np.random.random((4, self.numpoints))
xy = data[:2, :]
s, c = data[2:, :]
xy -= 0.5
xy *= 10
while True:
xy += 0.03 * (np.random.random((2, self.numpoints)) - 0.5)
s += 0.05 * (np.random.random(self.numpoints) - 0.5)
c += 0.02 * (np.random.random(self.numpoints) - 0.5)
yield data
def update(self, i):
"""Update the scatter plot."""
data = next(self.stream)
# Set x and y data...
self.scat.set_offsets(data[:2, :])
# Set sizes...
self.scat._sizes = 300 * abs(data[2])**1.5 + 100
# Set colors..
self.scat.set_array(data[3])
# We need to return the updated artist for FuncAnimation to draw..
# Note that it expects a sequence of artists, thus the trailing comma.
return self.scat,
def show(self):
plt.show()
if __name__ == '__main__':
a = AnimatedScatter()
a.show()
、以下を見てください:ここでは
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
def main():
numframes = 100
numpoints = 10
color_data = np.random.random((numframes, numpoints))
x, y, c = np.random.random((3, numpoints))
fig = plt.figure()
scat = plt.scatter(x, y, c=c, s=100)
ani = animation.FuncAnimation(fig, update_plot, frames=xrange(numframes),
fargs=(color_data, scat))
plt.show()
def update_plot(i, data, scat):
scat.set_array(data[i])
return scat,
main()
こんにちはジョー私はあなたの最初の例を試してみたが、それは二番目のイエスのに対し、動作しません。多分私は最初のオプションをデバッグしようとします、これは私のpythonの知識を向上させるのに役立ちます。ありがとう –
最初の例はEnthoughtディストリビューション(Win7、matplotlib 1.2.0、numpy 1.4)の下で完全に(resizeの処理を除いて)動作します。素晴らしいコード、ジョー!私は数時間それを見ることができます:-)。 – Dave
残念ながら、最初の例は、OS Xのmatplotlib 1.3.1を使って私のために表示されません。フレームを置くと、ポイントは表示されません。 2番目の例は動作します。 – JoshAdel