[PYTHON] La date n'est pas affichée correctement dans matplotlib.

1 Description de cet article

Lorsque je dessine un graphique de série chronologique à l'aide d'un tracé Python, la conversion de date ne fonctionne pas correctement. Par exemple, 2020-01-01 est affiché par erreur comme 0051-01-01.

80.JPG

2 Code où la date sur l'axe horizontal n'est pas affichée correctement

Affichez le graphe avec la commande "Data frame.plot (...)" pour le data frame généré par Pandas, et utilisez "mdates.DateFormatter ('% Y-% m-% d')" pour "Format YMD". J'ai constaté que la date ne s'affiche pas correctement lorsque je la règle sur. Lorsque j'exécute le code ci-dessous, la date sur l'axe horizontal ne s'affiche pas correctement.

/home/sampletest/sample.py


import datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import seaborn as sns

#Définissez un ensemble de données.(La date est datetime.Décrivez en datetime. Noté dans le type de date)
dat = [
    [datetime.datetime(2020,1,1),4,10],
    [datetime.datetime(2020,1,2),7,7],
    [datetime.datetime(2020,1,3),10,4],
    [datetime.datetime(2020,1,4),13,2],
    [datetime.datetime(2020,1,5),17,1],
    [datetime.datetime(2020,1,6),12,4],
    [datetime.datetime(2020,1,7),9,3],
    [datetime.datetime(2020,1,8),7,8],
    [datetime.datetime(2020,1,9),5,9],
    [datetime.datetime(2020,1,10),3,12],
    
    
]

dat=pd.DataFrame(dat,columns=["DATE","Y","Z"])
dat.set_index("DATE",inplace=True) #Définissez la date affichée sur l'axe horizontal sur l'index du DataFrame.
print(dat)


fig = sns.mpl.pyplot.figure() #Créez un objet pour dessiner le graphique.
ax=dat.plot(marker="o",figsize=(15, 5)) #Dataframe.Le dessin d'un graphique au format tracé provoque une erreur
ax.legend() #Dessinez une légende

#Paramètres de format de graphique(Définissez la méthode d'affichage de la date sur l'axe horizontal.)
days    = mdates.DayLocator(bymonthday=None, interval=2, tz=None)  #Axe horizontal: "Tous les jours" est affiché.(Sans cette ligne, la date sera dupliquée)
daysFmt = mdates.DateFormatter('%Y-%m-%d') #Axe horizontal: Format Y-M-Réglez sur D.
ax.xaxis.set_major_locator(days) #Affichez la date sur l'axe horizontal.
ax.xaxis.set_major_formatter(daysFmt) #Affichez la date sur l'axe horizontal.
fig.autofmt_xdate() #La date sur l'axe horizontal est inclinée pour qu'elle soit facile à voir.

#Donnez un nom au graphique
ax.set_xlabel('Date') #Définir le titre de l'axe X
ax.set_ylabel('Y') #Définir le titre de l'axe Y
plt.title(r"TEST",fontname="MS Gothic")  #Définissez le titre du graphique. Lors de la spécification du japonais, il est nécessaire de spécifier le nom de la police
#Définir la taille du graphique
fig.set_figheight(10)
fig.set_figwidth(20)
#Définir la plage d'affichage sur l'axe horizontal
ax.set_xlim(datetime.datetime(2020,1,1), datetime.datetime(2020,1,12)) 

3 Code pour afficher correctement la date sur l'axe horizontal

Il est nécessaire de changer la ligne de date de la trame de données de datetime à Matplotlib date.

Ajoutez dat ['DATE'] = mdates.date2num (dat ['DATE']).

/home/sampletest/sample.py


import datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import seaborn as sns
import pandas as pd

#Définissez un ensemble de données.(La date est datetime.Décrivez en datetime. Noté dans le type de date)
dat = [
    [datetime.datetime(2020,1,1),4,10],
    [datetime.datetime(2020,1,2),7,7],
    [datetime.datetime(2020,1,3),10,4],
    [datetime.datetime(2020,1,4),13,2],
    [datetime.datetime(2020,1,5),17,1],
    [datetime.datetime(2020,1,6),12,4],
    [datetime.datetime(2020,1,7),9,3],
    [datetime.datetime(2020,1,8),7,8],
    [datetime.datetime(2020,1,9),5,9],
    [datetime.datetime(2020,1,10),3,12],
     
]

dat=pd.DataFrame(dat,columns=["DATE","Y","Z"])
dat['DATE'] = mdates.date2num(dat['DATE'])  #Ajouter ici Convertir les objets datetime en dates Matplotlib.
dat.set_index("DATE",inplace=True) #Définissez la date affichée sur l'axe horizontal sur l'index du DataFrame.
print(dat)


fig = sns.mpl.pyplot.figure() #Créez un objet pour dessiner le graphique.
ax=dat.plot(marker="o",figsize=(15, 5))
ax.legend() #Dessinez une légende

#Paramètres de format de graphique(Définissez la méthode d'affichage de la date sur l'axe horizontal.)
days    = mdates.DayLocator(bymonthday=None, interval=2, tz=None)  #Axe horizontal: "Tous les jours" est affiché.(Sans cette ligne, la date sera dupliquée)
daysFmt = mdates.DateFormatter('%Y-%m-%d') #Axe horizontal: Format Y-M-Réglez sur D.
ax.xaxis.set_major_locator(days) #Affichez la date sur l'axe horizontal.
ax.xaxis.set_major_formatter(daysFmt) #Affichez la date sur l'axe horizontal.
fig.autofmt_xdate() #La date sur l'axe horizontal est inclinée pour qu'elle soit facile à voir.

#Donnez un nom au graphique
ax.set_xlabel('Date') #Définir le titre de l'axe X
ax.set_ylabel('Y') #Définir le titre de l'axe Y
plt.title(r"TEST",fontname="MS Gothic")  #Définissez le titre du graphique. Lors de la spécification du japonais, il est nécessaire de spécifier le nom de la police
#Définir la taille du graphique
fig.set_figheight(10)
fig.set_figwidth(20)
#Définir la plage d'affichage sur l'axe horizontal
ax.set_xlim(datetime.datetime(2020,1,1), datetime.datetime(2020,1,12)) 
81.JPG

Recommended Posts

La date n'est pas affichée correctement dans matplotlib.
Changer la langue affichée dans Django 1.9
La première étape de Python Matplotlib
Que faire si l'image n'est pas affichée à l'aide de matplotlib etc. dans le conteneur Docker
[Python] La valeur écrite par Openpyxl est affichée sous forme d'exposant (E).
Spécifiez la couleur dans la carte 2D matplotlib
Qu'est-ce que "mahjong" dans la bibliothèque Python? ??
Lorsque la cible est Ubuntu 16.04 dans Ansible
Y a-t-il NaN dans le DataFrame pandas?
La date n'est pas affichée correctement dans matplotlib.
PyQtGraph peut ne pas être disponible dans l'interpréteur.
Même si le langage de développement est changé en python3 dans Cloud9, la version 2 est affichée en python --version
Pipfile n'est pas créé dans le répertoire courant
Qu'est-ce que wheezy dans l'image Docker Python?
À propos de la différence entre "==" et "is" en python
Lorsque l'axe et l'étiquette se chevauchent dans matplotlib
Que faire lorsque seule la fenêtre est affichée et que rien ne s'affiche dans le pygame
Vérifiez si la chaîne est un nombre en python
Lorsque l'objet sélectionné dans bpy.context.selected_objects n'est pas renvoyé
Linux est quelque chose comme ça en premier lieu
Omettre les graduations du graphique après la virgule décimale dans matplotlib
Quel est l'attribut de domaine écrit dans la disposition de Plotly?
Vérifiez s'il s'agit d'Unix dans le langage de script
Définissez DateField du formulaire sur type = date dans Django
[Astuces] Enregistrez / copiez le graphique affiché dans Jupyter Lab
Trouvez la partie 575 de Wikipedia en Python
Incorporation dans datetime lorsque seule l'heure est connue
Vérifiez s'il s'agit d'Unix dans le langage de script
Lorsque "ERREUR: HTTP n'est pas pris en charge." S'affiche dans mpsyt
Mettez matplotlib dans Centos7.
Manipulation de date en Python
Afficher les images avec Matplotlib
L'image est affichée dans l'environnement de développement local, mais l'image n'est pas affichée sur le serveur distant de VPS.
Graphique 2D dans matplotlib
Obtenir la date en Python
Calculer la date avec python
[Python] Fractionner la date
Calculer les dates en Python
Test.py n'est pas reflété sur le serveur Web dans Python3.
Procédures à suivre lorsque le japonais n'est pas affiché dans matplotlib
[Pandas] Si les données de la première ligne sont dans l'en-tête de DataFrame
L'image en échelle de gris est affichée sous forme d'image couleur dans OpenCV / Python
Créer un graphique SVG avec matplotlib avec heroku (affiché en japonais)
Obtenez automatiquement le port où Arduino est bloqué en Python
Obtenez la date et l'heure actuelles en Python, en tenant compte du décalage horaire
Y a-t-il un biais dans les nombres qui apparaissent dans les nombres de Fibonacci?
Découvrez combien de chaque caractère est dans la chaîne.
Lorsque "Aucune modification détectée" s'affiche dans python3 manage.py makemigrations
Dans Django, comment abréger la longue chaîne de caractères affichée au milieu ...
Changer le message affiché lors de la connexion à Raspberry Pi
Remarques sur la coloration par valeur dans le diagramme de dispersion matplotlib
Impossible de saisir le japonais dans l'application Flatpak? La cause est Fcitx.