J'ai fait un film GIF qui faisait ressembler le contour à un manga, alors j'ai fait un mémorandum. L'environnement est Python 3.6.8
matplotlib.animation
Il semble que vous puissiez créer un graphique qui fonctionne avec matplotlib.animation.
Il semble normal d'utiliser imagemagick en tant qu'écrivain pour enregistrer sous forme de fichier GIF.
imagemagick
Cela semble un peu gênant lors de l'installation sur Windows.
La page que j'ai utilisée comme référence lors de la tentative d'installation. https://higuma.github.io/2016/08/31/imagemagick-1/
Le site auquel j'ai fait référence à propos de Pillow.
Installation https://note.nkmk.me/python-pillow-basic/
Comment créer un GIF https://note.nkmk.me/python-pillow-gif/
import_lib.py
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
from PIL import Image, ImageDraw
Préparez des données comme celles-ci.
Les coordonnées supposent quelque chose comme ça
test_data.py
test_data = pd.DataFrame({'key':range(10),
't1': [10] * 10,
't2': [i * 10 + 10 for i in range(10)],
't3': [i * 10 + 20 for i in range(10)],
't4': [5] * 10,
't5': [i * 10 + 5 for i in range(10)],
't6': [i * 10 + 15 for i in range(10)],
't7': [3] * 10,
't8': [i * 10 + 2 for i in range(10)],
't9': [i * 10 + 10 for i in range(10)]})
t = ['t' + str(int(i)) for i in range(1, 10)]
x = [i * 10 for i in range(1, 4)] * 3
y = [10] * 3 + [20] * 3 + [30] * 3
Créer une fonction d'extraction de données pour créer des diagrammes de contour
create_function.py
def f_contour_data(df, timing):
#Extraire les données de la ligne au moment où vous souhaitez dessiner le diagramme de contour
df0 = df[df['key'] == timing].copy()
#Définissez l'index sur 0 afin que les données extraites puissent être utilisées facilement.
df0.reset_index(drop = True, inplace = True)
x = [10, 20, 30] #Axe X du diagramme de contour
y = [10, 20, 30] #Axe Y du diagramme de contour
#Faites une liste de nombres
# [[t1, t2, t3], [t4, t5, t6], [t7, t8, t9]]
#Faites ceci
l_T = []
for i in range(len(y)):
T = ['t' + str(int(j + i * 3)) for j in range(1, 4)]
l_T.append(T)
#Créer un tableau 2D sur l'axe des x
x0 = np.empty((0, len(y))) #Créer un ndarray vide
for i in range(len(y)):
x0 = np.append(x0, np.array([x]), axis = 0) #Remplacez x par ndarray et ajoutez à x0
#Créer un tableau 2D sur l'axe y
y0 = np.empty((0, len(y)))
for i in range(len(y)):
y0 = np.append(y0, np.array([[y[i]] * 3]), axis = 0)
#Créer un tableau 2D sur l'axe z
z0 = np.empty((0, len(y)))
for i in range(len(y)):
temp = []
T = l_T[i]
for s in T:
temp.append(df0[s][0])
z0 = np.append(z0, np.array([temp]), axis = 0)
return x0, y0, z0, l_T # l_T est pour confirmation et peut être supprimé
Si vous utilisez ceci pour dessiner un diagramme de contour sur un texte, il ressemblera à ceci.
create_contour.py
x0, y0, z0, l_t = f_contour_data(df = test_data, timing = 0)
plt.figure()
p = plt.contourf(x0, y0, z0, cmap = 'jet')
cbar = plt.colorbar(p)
Après cela, je vais faire de plus en plus ceci en boucle et l'enregistrer.
loop.py
l_img = [] #Du diagramme de contour.Liste pour mettre le chemin png
os.makedirs('Contour_gif/', exist_ok = True) #Créer un dossier pour enregistrer les graphiques
lv = [i * 10 for i in range(14)]
for i in range(10):
x0, y0, z0, l_tc = f_contour_data(df = test_data, timing = i)
plt.figure()
p = plt.contourf(x0, y0, z0, lv, ![test.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84834/dd6833da-c69d-95de-f016-f0a7e6082a08.gif)
cmap = 'jet')
cbar = plt.colorbar(p)
plt.title('key = ' + str(int(i)))
save_path = 'Contour_gif/key_' + str(int(i)) + '.png'
plt.savefig(save_path, bbox_inches="tight") #Enregistrez le graphique que vous avez créé
l_img.append(save_path) #Je veux sûrement garder l'ordre du diagramme de contour, alors ajoutez-le à la liste ici
images = [] #Mettez le png ouvert dedans.
#Séparément l_Vous n'avez pas à spécifier la plage d'img. Je me fâche en fonction de la taille de l'image. .. ..
for s in l_img[0:151]:
im = Image.open(s)
images.append(im)
# images[0]Il est temps de changer avec une durée qui relie le reste à partir du point de départ(msec) loop =Boucle infinie à 0
images[0].save('test.gif',
save_all = True, append_images = images[1: len(images)],
duration = 500, loop = 0, optimaize = False)
Vous pouvez créer un fichier GIF comme celui-ci.
Recommended Posts