English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Este artículo describe cómo usar Matplotlib para implementar el efecto de animación de gráficos de gotas de agua en Python. Comparto con todos ustedes para que lo refieran, como se muestra a continuación:
Puntos clave
win10Instalar ffmpeg
Uso de la función animation
función update
win10Instalar ffmpeg
Debido a que finalmente se debe guardar el gráfico animado como .mp4Formato, se necesita ffmpeg, descárguelo en el sitio web oficial, yo descargué windows64Versión estática de bit, descomprima después de la descarga en la ruta común de instalación del software y agregue la ruta de ffmpeg a las variables de entorno (este método no se utiliza al final, pero se agrega de todos modos)
función animationa
Para ser exactos, es la función animation.FuncAnimation
Parámetros comunes:
animation.FuncAnimation(fig, func, frames, init_func, interval)
fig: matplotlib.figure.Figure
func: Se llama a cada cuadro, el primer parámetro de la función es el valor del siguiente parámetro frames
frames: iterable, puede ser un entero, si es un entero, es equivalente a pasar range(frames)
init_func: Función de inicialización, es la configuración inicial de fig
intervalo: Retraso entre cuadros en milisegundos. Por defecto es 200.
función update
Esta función implica los cambios en los parámetros de los gráficos dibujados en cada cuadro de cambio, como el tamaño de las gotas de agua, el color y la posición en el ejemplo (dibujo de puntos dispersos scatter), consulte el código específico
implementación del programa
Encontré el ejemplo inicial basado en la licencia BSD, después de algunos cambios propios, por lo que también puse el protocolo en el código
# ----------------------------------------------------------------------------- # Derechos de Autor (c) 2015, Nicolas P. Rougier. Todos los Derechos Reservados. # Distribuido bajo la licencia (nueva) BSD. Vea LICENSE.txt para más información. # ----------------------------------------------------------------------------- import numpy as np import matplotlib import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation from matplotlib import animation import os #确定ffmpeg.exe的位置,试过加在环境变量里但依然提示找不到MovieWriter,最后这个方法解决了,在Python2.7版本路径名前面要声明编码是unicode的,而在Python3中有无均可,这是2.X y3.x版本的一个编码方面的区别 plt.rcParams['animation.ffmpeg_path'] = u"D:\\Applications\\ffmpeg-20170503-a75ef15-win64-static\\bin\\ffmpeg.exe" #这里改变当前工作路径,方便下面保存文件的时候自动保存到该路径下面 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 figureand 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) # Número de anillos n = 50 size_min = 50 size_max = 50*50 # Posición del anillo, posición del anillo circular, rango en [0,1] entre P = np.random.uniform(0,1,(n,2)) # Colores del anillo C = np.ones((n,4)) * (0,1,0,1) #C = np.ones((n,3)) * (1,0,1) # El canal de color alfa va de 0 (transparente) a 1 (opaco) # Opacidad, valores en [0,1] entre C[:,2]= np.linspace(0,1,n) # Tamaños del anillo, rango en [50,2500] S = np.linspace(size_min, size_max, n) # Scatter plot # Dibujar gráfico de puntos scat = ax.scatter(P[:,0], P[:,1], s=S, lw = 0.5, edgecolors = C, facecolors='None') # Asegurar que los límites sean [0,1], y quitar las marcas # Asegurar que el rango de x, y esté en [0,1], quitar las marcas del eje ), ax.set_xlim(0,1), ax.set_xticks([]) ), ax.set_ylim(0,1), ax.set_yticks([]) def update(frame): global P, C, S # Cada anillo se hace más transparente C[:,3]= np.maximum(0, C[:,3] - 1.0/n) # Cada anillo se hace más grande cada vez S += (size_max - size_min) / n # Reiniciar el anillo específico del anillo (relativo al número de cuadro) i = frame % 50 P[i] = np.random.uniform(0,1,2) # P[i] = P[i,:], al mismo tiempo cambió los valores de x, y S[i] = size_min # 从最小的形状开始 C[i,3] 1 # Establecer la transparencia a1 # Update scatter object # Actualizar las propiedades del objeto de dibujo de dispersión, como edgecolors, sizes, offsets, etc. scat.set_edgecolors(C) # Establecer color del borde scat.set_sizes(S) # Establecer tamaño scat.set_offsets(P) # Establecer desplazamiento return scat, animate = FuncAnimation(fig, update, frames = 300, intervalo=70) # intervalo es cada70 milisegundos actualización una vez, puede ver help FFwriter = animation.FFMpegWriter(fps=20) # cuadros por segundo animate.save('rain.mp4', writer=FFwriter, dpi=360) # Establecer resolución plt.show()
Se genera un archivo mp4Convertí eso en un archivo gif muy pequeño y mostré el efecto, pero no funciona en formato gif
Los lectores interesados en más contenido relacionado con Python pueden ver la sección especial de este sitio: 'Tutorial de Estructuras de Datos y Algoritmos de Python', 'Resumen de Técnicas de Uso de Funciones de Python', 'Resumen de Técnicas de Operación de Cadenas de Python', 'Tutorial Clásico de Inicio y Avance de Python' y 'Resumen de Técnicas de Operación de Archivos y Directorios de Python'.
Espero que lo descrito en este artículo sea útil para el diseño de programas de Python de todos.
Declaración: El contenido de este artículo se obtiene de la red, pertenece al autor original, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha realizado un procesamiento editorial manual y no asume ninguna responsabilidad legal relevante. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @) para denunciar, y proporcione evidencia relevante. Una vez verificada, este sitio eliminará inmediatamente el contenido sospechoso de infracción.