Angenommen, Sie haben ein Streudiagramm scat = ax.scatter(...)
, dann können Sie
Ändern Sie die Positionen
scat.set_offsets(array)
wo array
ist eine N x 2
geformte Anordnung von x- und y-Koordinaten.
Ändern Sie die Größen
scat.set_sizes(array)
Wo array
ist ein 1D-Array von Größen in Punkten.
ändere die Farbe
scat.set_array(array)
Dabei array
handelt es sich um ein 1D-Array von Werten, die farblich zugeordnet werden.
Hier ist ein kurzes Beispiel mit dem Animationsmodul .
Es ist etwas komplexer als es sein muss, aber dies sollte Ihnen einen Rahmen geben, um schickere Dinge zu tun.
( - Code bearbeiten 2019 April mit dem aktuellen Versionen kompatibel zu sein. Für den älteren Code siehe Revisionsgeschichte )
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()
self.fig, self.ax = plt.subplots()
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).T
self.scat = self.ax.scatter(x, y, c=c, s=s, vmin=0, vmax=1,
cmap="jet", edgecolor="k")
self.ax.axis([-10, 10, -10, 10])
return self.scat,
def data_stream(self):
"""Generate a random walk (brownian motion). Data is scaled to produce
a soft "flickering" effect."""
xy = (np.random.random((self.numpoints, 2))-0.5)*10
s, c = np.random.random((self.numpoints, 2)).T
while True:
xy += 0.03 * (np.random.random((self.numpoints, 2)) - 0.5)
s += 0.05 * (np.random.random(self.numpoints) - 0.5)
c += 0.02 * (np.random.random(self.numpoints) - 0.5)
yield np.c_[xy[:,0], xy[:,1], s, c]
def update(self, i):
"""Update the scatter plot."""
data = next(self.stream)
self.scat.set_offsets(data[:, :2])
self.scat.set_sizes(300 * abs(data[:, 2])**1.5 + 100)
self.scat.set_array(data[:, 3])
return self.scat,
if __name__ == '__main__':
a = AnimatedScatter()
plt.show()
Wenn Sie auf OSX sind und die OSX - Backend verwenden, müssen Sie ändern , blit=True
um blit=False
in der FuncAnimation
Initialisierung unten. Das OSX-Backend unterstützt das Blitting nicht vollständig. Die Leistung wird darunter leiden, aber das Beispiel sollte unter OSX mit deaktiviertem Blitting korrekt ausgeführt werden.
Ein einfacheres Beispiel, bei dem nur die Farben aktualisiert werden, finden Sie in den folgenden Abschnitten:
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()