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 ↓
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 ↓
・ 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é.
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 ↓
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 ↓
・ 10 000 équivaut à 1 $ × 10 ^ 4 $ (** 10 à la 4e puissance **, soit 4 zéros), donc 1 million équivaut à 100 $ × 10 ^ 4 $
・ [Matplotlib] Je souhaite utiliser l'échelle de l'axe comme notation exponentielle (via.
Recommended Posts