Cet article est une version avancée de l'outil de visualisation de Python. ~~ C'est devenu long, j'ai donc décidé de diviser la version avancée en deux. (L'application 2 est toujours en cours d'écriture) ~~ La version avancée a été ajoutée à cet article pour en faire une. Si vous n'êtes pas familier avec l'intrigue Python, j'ai écrit les bases la dernière fois, alors veuillez vérifier ici!
Je suis actuellement étudiant en master de deuxième année. J'étudie l'atmosphère de Mars à l'aide de la simulation numérique. J'analysais les résultats obtenus par simulation numérique principalement en utilisant Python, j'ai donc essayé de résumer toutes les fonctions utilisées dans le processus. Veuillez noter qu'il n'est pas exhaustif. .. .. Je viens de regarder la documentation et j'ai eu du mal à l'utiliser, alors j'espère que si quelqu'un va utiliser les outils de visualisation de Python, cela aidera!
Ce qui suit sera expliqué dans un autre article (j'écrirai cette fois)
Les bibliothèques utilisées dans cet article sont les suivantes. Il n'y a aucun problème si vous copiez et collez le code suivant sur le code pour le moment.
import matplotlib.pyplot as plt #En fait, tracer
import numpy as np #Organiser les données
from matplotlib.colors import LogNorm #barre de couleur du journal
from matplotlib import animation as animation #Créer un fichier gif
Qu'est-ce qu'un tracé de couleurs en premier lieu? Je pense qu'il y a beaucoup de monde, donc les données 3D sont représentées par une carte couleur 2D comme le montre le graphique ci-dessous. ~~ Parce que c'est un gros problème, j'ai un visage artistique ... lol ~~
Structure et explication du dessin graphique à l'aide de pcolor. (Veuillez copier et utiliser)
#Structure de pcolor
#1
#axe x,Préparer les données et le maillage de l'axe y
#Probablement des données 3D que vous souhaitez tracer(x,y)Je pense qu'il y a des ingrédients.
#ex) x = y = np.arange(-10, 10, 0.5)
X, Y = np.meshgrid(x, y) #Cette x,Y est len respectivement(x)*len(y)Cela devient une matrice de.
#2
#Créez Z.
#Si vous avez des données que vous souhaitez tracer
#X fait à l'étape 1,Créez une matrice Z de même taille que Y.(Faire une matrice en lisant depuis csv)
#Si non(Cet échantillon)
#Z=f(X,Y)Écrivez la fonction comme
#ex)
Z = np.exp(-X**2-Y**2)
#S'il y a un vide dans les données et que vous souhaitez masquer la plage(Décommenter si nécessaire)
#Z = np.ma.masked_where(np.isnan(Z), Z)#Masquer aucun emplacement
#3
#terrain
fig, ax = plt.subplots(dpi=100) #dpi:résolution
#Créer une carte de couleurs
c=ax.pcolor(X,Y,Z,cmap='Carte des couleurs préférées', vmin=valeur minimum, vmax=Valeur maximum)
#c=ax.pcolor(X,Y,Z, norm=LogNorm(valeur minimum,Valeur maximum),cmap='Carte des couleurs préférées') #log échelle ver
#Ajouter une barre de couleurs
cax = fig.colorbar(c, ax=ax) #Ajouter une barre de couleurs
#Remplissez la zone masquée avec des lignes diagonales(Décommenter si nécessaire)
#ax.patch.set(hatch='x', edgecolor='black')
Je pense que c'est difficile à imaginer, donc par exemple, X dans l'exemple de code est X= C'est une matrice de len (x) * len (y). Z est également une matrice de même taille et la valeur z des coordonnées (x, y) est composée comme un élément.
La fonction pcolor
c=ax.pcolor(X,Y,Z,cmap='Carte des couleurs préférées', vmin=valeur minimum, vmax=Valeur maximum)
-Cmap = 'type de carte de couleur' peut être utilisé pour spécifier la couleur à utiliser. Vous pouvez en trouver beaucoup dans ce document officiel. -Vous pouvez décider de la plage que vous souhaitez colorer vmin et vmax. Autrement dit, les pixels sont colorés avec des valeurs z de vmin à vmax.
Ceci est un exemple de code du visage écrit en pcolor.
#pcolor
from matplotlib.colors import LogNorm
import matplotlib.pyplot as plt #En fait, tracer
import numpy as np #Organiser les données
x = y = np.arange(-10, 10, 0.5)
X, Y = np.meshgrid(x, y)#Mailler et créer une matrice
#Une fonction qui exprime les yeux, le nez et la bouche du visage
Z = np.exp(-(X+5)**2 - (Y-3)**2)+np.exp(-(X-5)**2-(Y-3)**2)+np.exp(-(X)**2-(5*(Y+5))**2)+np.exp(-(10*X)**2-(5*Y)**2)
fig, ax = plt.subplots(dpi=200)
#Tracer avec pcolor
c=ax.pcolor(X,Y,Z, norm=LogNorm(1e-4, 1),cmap='Set3')
cax = fig.colorbar(c, ax=ax,shrink=0.9)
C'est le graphique.
Lors du partage de l'axe des x, c'est OK si la structure est la suivante. (Pour copier et coller)
fig, ax1 = plt.subplots(dpi=100)
##Écrivez le tracé ax1 ici
#ax1.plot(...)
#ax1.set_??
ax2 = ax1.twinx()#Vous pouvez maintenant partager l'axe des x!!!
##Écrivez le tracé ax2 ici
#ax2.plot(...)
#ax2.set_??
Voici l'exemple de code.
import matplotlib.pyplot as plt #En fait, tracer
import numpy as np #Organiser les données
def fun(x):
y = 2**x #Écrivez votre propre fonction ici
return y
#prepare x,y data
X = np.linspace(1,10,num=100)
Y1 = fun(X)
Y2 = np.exp(X)
#Tracé pour l'axe y gauche
fig, ax1 = plt.subplots(dpi=100)
ax1.plot(X,Y1,color='g',label=r'$y=2^x$', linestyle='-.',)
ax1.set_xlabel('xaxis')
ax1.set_ylabel("yaxis1")
ax1.set_ylim((0,100))
ax1.tick_params(axis='y')
ax1.legend(loc="upper left")
#Tracer pour l'axe y droit
ax2 = ax1.twinx()#Vous pouvez maintenant partager l'axe des x!!!
ax2.plot(X,Y2,color='r', label=r'$y=e^x$')#terrain
ax2.set_ylabel('yaxis2') # we already handled the x-label with ax1
ax2.set_yscale("log") #Axe y droit défini sur l'échelle logarithmique
ax2.set_ylim((1,10000))
ax2.legend(loc="upper right")
Je veux dessiner un tel graphique!
Si vous souhaitez organiser deux graphiques verticalement, vous pouvez utiliser la structure suivante.
#(1)
#Disposer verticalement deux sous-graphiques
fig, axs = plt.subplots(2,1,sharex=True,dpi=100)
#Définissez 0 entre les graphiques supérieur et inférieur et collez-les ensemble
fig.subplots_adjust(hspace=0)
#(2)
#Dessinez le graphique ci-dessus
axs[0].plot(...)
#(3)
#Dessinez le graphique ci-dessous
axs[1].plot(...)
#Mise en garde
#Le nombre de graphiques peut être modifié librement
#ex) 2,3 au lieu de 1,S'il est défini sur 1, 3 seront disposés verticalement,,,
#dpi:résolution
#sharex=S'il est défini sur False, il devient simplement un sous-tracé.
Voici l'exemple de code.
#Définissez votre fonction préférée
import matplotlib.pyplot as plt #En fait, tracer
import numpy as np #Organiser les données
def fun(x):
y = 2**x #Écrivez votre propre fonction ici
return y
#prepare x,y data
X = np.linspace(1,10,num=100)
Y1 = fun(X)#Y données que vous souhaitez tracer
Y2 = np.exp(X)
#create 2 subplots vertically adjusted
fig, axs = plt.subplots(2,1,sharex=True,dpi=100)
fig.subplots_adjust(hspace=0)
#Graphique ci-dessus
axs[0].plot(X,Y1,color='g',label=r'$y=2^x$', linestyle='-.',)
axs[0].set_ylabel("yaxis1")
axs[0].set_ylim((1,100))
axs[0].tick_params(axis='y')
axs[0].legend(loc="upper right")
#Graphique ci-dessous
axs[1].plot(X,Y2,color='r', label=r'$y=e^x$')
axs[1].set_xlabel('xaxis')
axs[1].set_ylabel('yaxis2') # we already handled the x-label with ax1
axs[1].set_yscale("log") #Axe y droit défini sur l'échelle logarithmique
axs[1].legend(loc="upper right")
J'ai créé le plus simple.
Structure et explication de la création de fichiers gif. (Pour copier et coller)
import matplotlib.pyplot as plt #En fait, tracer
import numpy as np #Organiser les données
from matplotlib import animation as animation #Créer un fichier gif
#Vous disposez probablement des données que vous souhaitez tracer et qui évoluent avec le temps
#X il,Y(t)Quand tu fais
#Tout d'abord, créez une fonction pour tracer chaque image
#Cette variable i'interval'Augmentera petit à petit
def iplot(i, args,,,):
plt.clf()#Effacer le graphique dans l'image précédente(Supprimer si vous souhaitez conserver)
#Dessinez un tracé image par image ici
#À mesure que i augmente, les données à tracer changeront en conséquence.
#ex) plt.plot(X,Y(i))
#Faites une figure comme d'habitude
fig = plt.figure(dpi=100) #dpi:résolution
#création de fichier gif
#sens:Augmentez i par intervalle pour chaque image par le nombre d'images de la fig, et tracez avec la fonction iplot.
#fargs=(,,)Spécifie un argument autre que i de la fonction iplot
#i augmente chaque intervalle
#Vous pouvez spécifier le nombre d'images à créer avec des cadres
ani = animation.FuncAnimation(fig, iplot,fargs=(args), interval = 1, frames = 50)
#enregistrer
#Spécifiez le nom du fichier
#écrire r, quelle méthode utiliser? Il n'y a pas de problème avec imagegick pour le moment
#Spécifiez le nombre d'images par seconde avec fps
ani.save('filename.gif', writer='imagemagick', fps=20)
L'exemple de code est ci-dessous.
import matplotlib.pyplot as plt #En fait, tracer
import numpy as np #Organiser les données
from matplotlib import animation as animation #Créer un fichier gif
#Préparez X et Y à tracer.
X = np.linspace(1,10,num=100)
Y = 2*X #y=2x
#Créer une fonction pour tracer chaque image
#Cette variable i(Dans la fonction d'animation ci-dessous)'interval'Augmentera petit à petit
def iplot(i,X,Y):
plt.clf()#Sans cela, le graphique de l'image précédente reste
plt.plot(X+i,Y)#Cette fois, y=Déplacer 2x en parallèle dans la direction x
plt.xlim((0,60))#Définir la gamme
plt.xlabel('xaxis')
plt.ylabel('yaxis')
plt.text(2,18,"y=2(x-"+str(i)+")")
fig = plt.figure(dpi=100)
#Créer un fichier gif
ani = animation.FuncAnimation(fig, iplot,fargs=(X,Y), interval = 1, frames = 50)
#enregistrer
ani.save('filename.gif', writer='imagemagick', fps=20)
La version avancée étant devenue longue, j'écrirai l'article suivant à une date ultérieure. Contenu
est. Puis!
Recommended Posts