Ich habe einen GIF-Film gemacht, in dem die Konturfigur wie ein Manga aussieht, also habe ich ein Memorandum gemacht. Umgebung ist Python 3.6.8
matplotlib.animation
Es scheint, dass Sie ein Diagramm erstellen können, das mit matplotlib.animation funktioniert.
Es scheint normal, imagemagick als Writer zu verwenden, um es als GIF-Datei zu speichern.
imagemagick
Bei der Installation unter Windows scheint dies ein wenig problematisch zu sein.
Die Seite, die ich bei der Installation als Referenz verwendet habe. https://higuma.github.io/2016/08/31/imagemagick-1/
Die Seite, auf die ich mich über Pillow bezog.
Installation https://note.nkmk.me/python-pillow-basic/
Wie erstelle ich ein 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
Bereiten Sie solche Daten vor.
Koordinaten nehmen so etwas an
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
Erstellen Sie eine Datenextraktionsfunktion zum Erstellen von Konturdiagrammen
create_function.py
def f_contour_data(df, timing):
#Extrahieren Sie die Daten der Zeile zu dem Zeitpunkt, zu dem Sie das Konturdiagramm zeichnen möchten
df0 = df[df['key'] == timing].copy()
#Setzen Sie den Index auf 0, damit die extrahierten Daten problemlos verwendet werden können.
df0.reset_index(drop = True, inplace = True)
x = [10, 20, 30] #X-Achse des Konturdiagramms
y = [10, 20, 30] #Y-Achse des Konturdiagramms
#Machen Sie eine Liste von Zahlen
# [[t1, t2, t3], [t4, t5, t6], [t7, t8, t9]]
#Mach das
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)
#Erstellen Sie ein 2D-Array mit x-Achse
x0 = np.empty((0, len(y))) #Erstellen Sie ein leeres ndarray
for i in range(len(y)):
x0 = np.append(x0, np.array([x]), axis = 0) #Ersetzen Sie x durch ndarray und fügen Sie es zu x0 hinzu
#Erstellen Sie ein 2d-Array mit y-Achse
y0 = np.empty((0, len(y)))
for i in range(len(y)):
y0 = np.append(y0, np.array([[y[i]] * 3]), axis = 0)
#Erstellen Sie ein 2D-Array mit Z-Achse
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 dient zur Bestätigung und kann gelöscht werden
Wenn Sie damit ein Konturdiagramm auf einem Text zeichnen, sieht es folgendermaßen aus.
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)
Danach werde ich dies immer mehr in einer Schleife machen und es speichern.
loop.py
l_img = [] #Vom Konturdiagramm.Liste zum Einfügen des PNG-Pfads
os.makedirs('Contour_gif/', exist_ok = True) #Erstellen Sie einen Ordner zum Speichern von Grafiken
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") #Speichern Sie das von Ihnen erstellte Diagramm
l_img.append(save_path) #Ich möchte die Reihenfolge des Konturdiagramms sicher beibehalten, also fügen Sie es der Liste hier hinzu
images = [] #Legen Sie das offene PNG hinein.
#Separat l_Sie müssen den Bereich von img nicht angeben. Ich werde abhängig von der Größe des Bildes wütend. .. ..
for s in l_img[0:151]:
im = Image.open(s)
images.append(im)
# images[0]Zeit zum Umschalten mit der Dauer, um den Rest vom Startpunkt aus zu verbinden(msec) loop =Endlosschleife bei 0
images[0].save('test.gif',
save_all = True, append_images = images[1: len(images)],
duration = 500, loop = 0, optimaize = False)
Sie können eine solche GIF-Datei erstellen.
Recommended Posts