[PYTHON] Changer l'échelle de l'axe Y de Matplotlib en notation exponentielle (10 Nth power notation)

ex1) Tracez un graphique

test1.py



import sqlalchemy
import pandas as pd
import matplotlib.pyplot as plt

#Initialisation de SQLAlchemy
CONNECT_INFO = 'mssql+pyodbc://hogehoge'
engine = sqlalchemy.create_engine(CONNECT_INFO, encoding='utf-8')

#Réglage variable
qq = 1
ym = 201607

#Connexion à la base de données, exécution stockée, création de trames de données pandas
query = 'EXEC dbo.sp_rtrv_hogehoge @q = {0},@prd = {1}'.format(qq,ym )
df = pd.read_sql_query(query, engine  ,index_col =['t'])

#Dessin graphique
ax = df.plot(  color=('b','r') , alpha=0.6  )
plt.title('hogehoge_title')
plt.grid(which='major')
#ax = plt.gca()

#Enregistrer le fichier
fname ='test'+ str(ym) +'.png'
plt.savefig(fname) 
plt.close()  

-Plot () of pandas (df) est une méthode wrapper de plt.plot () de matplotlib -Dans ce qui précède, exécuter la procédure stockée de SQLSevrer (dans SQLServer, exécuter stockée dans EXEC) -Les arguments stockés (qq et ym) sont spécifiés en notation intégrée de variable python. -Vous pouvez obtenir le graphique en cours d'édition avec ʻax = plt.gca () `

-Dans ce qui précède, aucune échelle de l'axe Y n'est appliquée, donc par exemple, dans le cas de 1 million, il s'écrit "1000000" tel quel.

Échelle de l'axe Y ↓ ex1.png

ex2) Changer l'échelle de l'axe Y en notation scientifique

test1.py



import sqlalchemy
import pandas as pd
import matplotlib.pyplot as plt

#(Omission)

#Dessin graphique
ax = df.plot(  color=('b','r') , alpha=0.6  )
#ax = plt.gca()
ax.ticklabel_format(style="sci",  axis="y",scilimits=(0,0))

Échelle de l'axe Y ↓ ex2.png

・ C'est devenu une échelle comme "Data Scientist" (rires) Cependant, avec la notation de le6, il y a un risque que le patron du système littéraire Osan, faible en mécanique, devienne une aubaine (yeux blancs), donc le prochain ex3 a été peaufiné.

ex3) Changez l'échelle de l'axe Y en une notation de puissance de 10.

test1.py



import sqlalchemy
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter

#(Omission)

#Dessin graphique
ax = df.plot(  color=('b','r') , alpha=0.6  )
#ax = plt.gca()
ax.yaxis.set_major_formatter(ScalarFormatter(useMathText=True))
ax.ticklabel_format(style="sci",  axis="y",scilimits=(0,0))

-Si la propriété de ScalarFormatter est définie sur ʻuseMathText = True`, cela devient une notation de puissance de 10. ・ Un million équivaut à 1 $ × 10 ^ 6 $ (** 10 à la 6e puissance **, soit 6 zéros)

Échelle de l'axe Y ↓ ex3.png

ex4) Changez l'échelle de l'axe Y de 1 × 10 ^ 6 à 1 × 10 ^ 4.

test4.py



import sqlalchemy
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter

#Paramètres de classe * Inherit ScalarFormatter
class FixedOrderFormatter(ScalarFormatter):
    def __init__(self, order_of_mag=0, useOffset=True, useMathText=True):
        self._order_of_mag = order_of_mag
        ScalarFormatter.__init__(self, useOffset=useOffset, 
                                 useMathText=useMathText)
    def _set_orderOfMagnitude(self, range):
        self.orderOfMagnitude = self._order_of_mag

#(Omission)

#Dessin graphique
ax = df.plot(  color=('b','r') , alpha=0.6  )
#ax = plt.gca()
ax.yaxis.set_major_formatter(FixedOrderFormatter(4 ,useMathText=True))
#ax.yaxis.set_major_formatter(ScalarFormatter(useMathText=True))
ax.ticklabel_format(style="sci",  axis="y",scilimits=(0,0))

・ Selon les données, vous voudrez peut-être utiliser 10 000 unités (1 $ x 10 ^ 4 $) au lieu de 1 million de notation (1 $ x 10 ^ 6 $)! ・ Quand j'ai recherché et recherché diverses choses telles que le github de matplotlib et stackOverflow, il semble que ScalarFormatter ait un orderOfMagnitude, qui contrôle la partie N de 10 Nth power. -Dans ce qui précède, la classe qui hérite de ScalarFormatter est définie, et l'état de ʻuseMathText = True` est conservé tel quel, et la commande orderOfMagnitude de ScalarFormatter est spécifiée, et elle est changée en notation 10 4.

Échelle de l'axe Y ↓ ex4.png

・ 10 000 équivaut à 1 $ × 10 ^ 4 $ (** 10 à la 4e puissance **, soit 4 zéros), donc 1 million équivaut à 100 $ × 10 ^ 4 $

URL de référence

[Matplotlib] Je souhaite utiliser l'échelle de l'axe comme notation exponentielle (via.

Recommended Posts

Changer l'échelle de l'axe Y de Matplotlib en notation exponentielle (10 Nth power notation)
Changer le style de matplotlib
Script pour changer la description de fasta
À propos de la notation de l'axe X du graphique à barres de Matplotlib
Modifiez le point décimal de la journalisation de, à.
Ajoutez des informations au bas de la figure avec Matplotlib
Omettre les graduations du graphique après la virgule décimale dans matplotlib
[Introduction à Python] Utilisation basique de la bibliothèque matplotlib
[Python] Modifier le contrôle du cache des objets téléchargés sur Cloud Storage
Une introduction à l'orientation des objets - changeons l'état interne d'un objet
Changer le volume de Pepper en fonction de l'environnement environnant (son)
La route pour télécharger Matplotlib
Changer le thème de Jupyter
Le pouvoir des pandas: Python
Comment modifier le niveau de journalisation d'Azure SDK pour Python
Comment changer la couleur du seul bouton pressé avec Tkinter
N'hésitez pas à changer l'étiquette de légende avec Seaborn en python
[Go] Créez une commande CLI pour changer l'extension de l'image
J'ai résumé comment changer les paramètres de démarrage de GRUB et GRUB2
Changez le modèle Flyweight en Pythonic (?) (2)
Changer l'arrière-plan d'Ubuntu (GNOME)
La puissance des solveurs d'optimisation combinée
Changez le modèle Flyweight en Pythonic (?) (1)
Changer le suffixe de django-filter / DateFromToRangeFilter
À propos de la taille des points dans matplotlib
Supplément à l'explication de vscode
[Python] Changer l'alphabet en nombre
Je veux changer la couleur en cliquant sur le point de dispersion dans matplotlib
Lorsque vous souhaitez modifier l'en-tête HTTP du client de test de Flask