Cet article est l'article du 22ème jour de MicroAd Advent Calendar 2019.
Les graphiques de séries chronologiques sont un outil très utile lors de la visualisation des données de journal. Jusqu'à présent, j'ai vécu une telle vie où je me suis échappé en traçant en remplaçant la date sur l'axe horizontal par un nombre approprié. Mais maintenant, c'est différent. Maintenant, vous pouvez bien tracer avec l'axe horizontal dans l'ordre chronologique! Alors, je voudrais résumer l'histoire sous forme de mémorandum. Le graphique créé ici utilise uniquement l'option ** minimum **.
Vous pouvez tracer correctement avec matplotlib.dates
.
Voici un exemple de code.
import io
import pandas as pd
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
def main():
data = """date,value
2018-12-01,15
2018-12-02,30
2018-12-03,25
2018-12-04,18
2018-12-05,9
2018-12-06,22
2018-12-07,34
2018-12-08,33
2018-12-09,28
2018-12-10,22
2018-12-11,26
2018-12-12,31"""
df = pd.read_csv(io.StringIO(data), parse_dates=[0])
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(df['date'], df['value'])
##Personnalisez les éléments suivants
daysFmt = mdates.DateFormatter('%Y-%m-%d')
ax.xaxis.set_major_formatter(daysFmt)
fig.autofmt_xdate()
plt.show()
if __name__ == '__main__':
main()
La figure créée par ce code est la suivante.
Si vous souhaitez modifier un peu la méthode d'affichage,
daysFmt = mdates.DateFormatter('%Y-%m-%d')
Vous pouvez jouer avec ici.
daysFmt = mdates.DateFormatter('%m/%d')
Si vous le modifiez comme ci-dessus, l'étiquette de l'axe x ressemblera à ceci:
Je vais changer un peu les données et l'essayer pour chaque date et heure.
import io
import pandas as pd
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
def main():
data = """date,value
2018-12-01 00,15
2018-12-01 01,30
2018-12-01 02,25
2018-12-01 03,18
2018-12-01 04,9
2018-12-01 05,22
2018-12-01 06,34
2018-12-01 07,33
2018-12-01 08,28
2018-12-01 09,22
2018-12-01 10,26
2018-12-01 11,31"""
df = pd.read_csv(io.StringIO(data), parse_dates=[0])
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(df['date'], df['value'])
##Personnalisez les éléments suivants
daysFmt = mdates.DateFormatter('%m/%d %H:%M')
ax.xaxis.set_major_formatter(daysFmt)
fig.autofmt_xdate()
plt.show()
if __name__ == '__main__':
main()
Le chiffre obtenu est le suivant.
Si vous souhaitez modifier la fréquence de l'échelle, ajoutez les deux lignes suivantes.
daysLoc = mdates.HourLocator(byhour=None, interval=3, tz=None)
ax.xaxis.set_major_locator(daysLoc)
Cela changera la fréquence de l'échelle.
C'est devenu un personnage très solitaire.
Cette fois, je l'ai défini avec ʻinterval, mais vous pouvez obtenir exactement le même résultat en supprimant l'option ʻinterval
et en la définissant avecbyhour = range (2, 12, 3)
.
En plus du HourLocater
utilisé ici, il en existe de nombreux tels que MonthLocator, WeekdayLocator, DayLocator, MonthLocator, MinuteLocator, SecondLocator
.
L'étiquette de l'axe est trop longue et dépasse! Dans ce cas, vous pouvez le faire pivoter. Vous pouvez le faire en ajoutant les deux lignes suivantes.
labels = ax.get_xticklabels()
plt.setp(labels, rotation=45)
C'est le chiffre obtenu. Vous pouvez voir que l'angle de l'étiquette a changé.
Voici un résumé des ** options minimales ** dont j'avais besoin pour tracer au fil du temps. Créez un graphique plus compréhensible en fonction de la situation! Maintenant que nous avons la visualisation, c'est l'analyse des séries chronologiques ...
matplotlib.dates (document officiel) Réglage de l'axe lors du traçage des données de séries temporelles avec matplotlib + bonus Graphique de séries temporelles Python matplotlib (réglage de l'axe des temps) [Définissez l'échelle de l'axe du graphique des données de séries chronologiques avec matplotlib.dates] (https://bunseki-train.com/setting_ticks_by_matplotlib_dates/)
Recommended Posts