English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dieser Artikel erläutert die Methode, wie man mit Python und Matplotlib die Animationseffekte von Regentropfenkarten implementiert. Ich teile es mit Ihnen, um Ihnen zur Verfügung zu stellen, genauer gesagt:
Schlüsselpunkte
win10Installieren Sie ffmpeg
Verwendung der animation-Funktion
update-Funktion
win10Installieren Sie ffmpeg
Weil die Animation am Ende als .mp gespeichert werden soll4Format, es wird ffmpeg verwendet, laden Sie es von der Webseite herunter, ich habe von az Windows heruntergeladen64Bit static Version, nach dem Download entpacken Sie sie in den gewöhnlichen Installationspfad des Programms und fügen Sie den Pfad von ffmpeg zu den Umgebungsvariablen hinzu (dieser Weg wird am Ende nicht mehr verwendet, aber es wird noch hinzugefügt)
animationa-Funktion
Genauer gesagt, die Funktion animation.FuncAnimation
Häufig verwendete Parameter:
animation.FuncAnimation(fig,func,frames,init_func,interval)
fig:matplotlib.figure.Figure
func:Jedes Frame wird aufgerufen, der erste Parameter der Funktion ist der Wert im nächsten Parameter frames
frames:iterable, kann ein Integer sein, ein Integer entspricht range(frames)
init_func:Initialisierungsfunction, d.h. die ursprüngliche Einstellung von fig
interval:Verzögerung zwischen den Frames in Millisekunden. Standardmäßig 200.
update-Funktion
Diese Funktion betrifft die Veränderungen der Parameter in den gezeichneten Graphen jedes Frames, wie z.B. die Größe der Regentropfen, die Farbe und die Position im Beispiel (Scatter-Diagramm zeichnen), genauer im Code sehen
program implementation
最初找到了例程的基于BSD协议的,经过一些自己的修改,所以我也在代码中贴上该协议
# ----------------------------------------------------------------------------- # Copyright (c) 2015, Nicolas P. Rougier. All Rights Reserved. # Distributed under the (new) BSD License. See LICENSE.txt for more info. # ----------------------------------------------------------------------------- import numpy as np import matplotlib import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation from matplotlib import animation import os # Determine the location of ffmpeg.exe, tried adding it to the environment variables but still提示找不到MovieWriter, finally this method solved it in Python2.7version path name must declare the encoding as unicode in Python3can be omitted, this is2.X and3.x version has a difference in encoding plt.rcParams['animation.ffmpeg_path'] = u"D:\\Applications\\ffmpeg-20170503-a75ef15-win64-static\\bin\\ffmpeg.exe # Here, the current working directory is changed to facilitate automatic saving to this path when saving files below os.chdir("d:\\Files\\python\\matplotlib") # No toolbar matplotlib.rcParams['toolbar'] = 'None' # New figure with white background fig = plt.figure(figsize=(6,6), facecolor='white') # New axis over the whole figure and a 1:1 aspect ratio # ax = fig.add_axes([0,0,1,1], frameon=False, aspect=1) ax = fig.add_axes([0,005,0,005,0.990,0.990], frameon=True, aspect='}}1) # Number of ring n = 50 size_min = 50 size_max = 50*50 # Ring position , die Position der Ringe, im Bereich [0,1] zwischen P = np.random.uniform(0,1,(n,2)) # Ring colors die Farben der Ringe C = np.ones((n,4)) * (0,1,0,1) #C = np.ones((n,3)) * (1,0,1) # Der Alpha-Farbwertkanal geht von 0 (durchsichtig) bis 1 (durchsichtig) # Transparency, value between [0,1] zwischen C[:,2] = np.linspace(0,1,n) # Ring sizes die Größe der Ringe, im Bereich [50,2500] S = np.linspace(size_min, size_max, n) # Streudiagramm # Scatter plot scat = ax.scatter(P[:,0], P[:,1], s=S, lw = 0.5, edgecolors = C, facecolors='None') # Ensure limits are [0,1] and remove ticks # Ensure x,y are within [0,1] zwischen, die Koordinatenachsenmarkierungen werden entfernt , ax.set_xlim(0,1), ax.set_xticks([]) , ax.set_ylim(0,1), ax.set_yticks([]) def update(frame): global P, C, S # Every ring is made more transparent jeder Ring wird transparenter C[:,3]= np.maximum(0, C[:,3] - 1.0/n) # Each ring is made larger jeder Ring wird größer als zuvor S += (size_max - size_min) / n # Reset ring specific ring (relative to frame number) i = frame % 50 P[i] = np.random.uniform(0,1,2) # P[i] = P[i,:], gleichzeitig wurden die Werte von x und y geändert S[i] = size_min # 从最小的形状开始 C[i,3] = 1 #Setzen Sie die Transparenz auf1 # Aktualisieren Sie das Scatter-Objekt # Aktualisieren Sie die Eigenschaften des Scatter-Diagramms, z.B. edgecolors, sizes, offsets scat.set_edgecolors(C) #Setzen Sie die Kantenfarbe scat.set_sizes(S) #Setzen Sie die Größe scat.set_offsets(P) #Setzen Sie den Abstand return scat, animate = FuncAnimation(fig, update, frames = 300,interval=70)#Interval ist jede70 Millisekunden aktualisieren, Sie können help aufrufen FFwriter = animation.FFMpegWriter(fps=20) #Bilder pro Sekunde animate.save('rain.mp4', writer=FFwriter,dpi=360)#Auflösungseinstellungen plt.show()
Das generierte ist mp4Ich habe es in ein sehr kleines GIF umgewandelt und gezeigt, es scheint, dass das Speichern im Format GIF nicht funktioniert
Interessierte Leser, die mehr über Python erfahren möchten, können die Themenbereiche dieser Website besuchen: "Python-Datenstrukturen und Algorithmen-Lehrbuch", "Zusammenfassung der Techniken zur Verwendung von Python-Funktionen", "Zusammenfassung der Techniken zur Verwendung von Python-Strings", "Klassisches Lehrbuch für den Einstieg und die Fortbildung in Python" sowie "Zusammenfassung der Techniken zur Verwendung von Python-Dateien und Verzeichnissen"
Wir hoffen, dass der Artikel, den wir hier vorgestellt haben, Ihnen bei der Programmierung in Python weiterhelfen kann.
Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem Urheber. Der Inhalt wurde von Internetnutzern selbständig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht manuell bearbeitet. Sie übernimmt auch keine rechtlichen Verantwortlichkeiten. Wenn Sie Inhalte entdecken, die möglicherweise urheberrechtlich geschützt sind, freuen wir uns über eine E-Mail an: notice#oldtoolbag.com (Bitte ersetzen Sie # durch @, wenn Sie eine E-Mail senden, und geben Sie relevante Beweise an. Sobald die Anschuldigung bestätigt wird, wird dieser Inhalt sofort gelöscht, der als urheberrechtlich geschützt gilt.)