Maison  >  Article  >  développement back-end  >  Comment afficher correctement les dates sur l'axe des x d'un tracé linéaire Pandas ?

Comment afficher correctement les dates sur l'axe des x d'un tracé linéaire Pandas ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-26 18:49:02693parcourir

How to Correctly Display Dates on the x-axis of a Pandas Line Plot?

Affichage de la date sur l'axe x dans le tracé linéaire Pandas Dataframe

Introduction

Pour afficher les dates sur l'axe x d'un tracé linéaire Pandas, le set_index () peut être utilisée pour convertir une colonne contenant des valeurs de date en index du DataFrame. Cependant, lors de l'utilisation de la fonction DateFormatter de matplotlib pour formater les dates, certains problèmes peuvent survenir.

Problème DateFormatter

L'image ci-dessous illustre le problème lié à l'ajout de DateFormatter au code :

[Image d'un tracé linéaire avec un formatage de date incorrect]

Remarquez que les dates commencent le 5-24 au lieu du 5-25, et que le jeudi est incorrectement étiqueté pour le 5-25 de 2017. Cela est souvent dû au fuseau horaire. problèmes liés ou incompatibilités entre les pandas et les utilitaires datetime de matplotlib.

Incompatibilité des objets Pandas et Matplotlib Datetime

Les pandas et les objets datetime matplotlib sont généralement incompatibles. Lorsque vous tentez d'utiliser un objet de dates matplotlib sur un axe de date créé avec des pandas, des problèmes peuvent survenir.

L'une des raisons à cela est que les objets datetime de pandas sont convertis en nombres à virgule flottante représentant le temps en jours depuis 0001-01. -01 UTC, plus 1. Ce format diffère du format datetime de matplotlib.

Solutions

Utilisation de x_compat

Pour résoudre le problème de formatage de la date, l'argument x_compat=True peut être passé à la méthode plot(). Cela demande aux pandas de ne pas utiliser son propre format datetime, ce qui permet d'utiliser les tickers, localisateurs et formateurs de matplotlib.

Tracer la date/heure avec Matplotlib

Alternativement, si un formatage datetime plus précis est requis, matplotlib peut être utilisé à la fois pour le traçage et le formatage. L'extrait de code suivant illustre cette approche :

<code class="python">import matplotlib.pyplot as plt
import matplotlib.dates as dates

# Create the DataFrame
df = pd.DataFrame({'date':['20170527','20170526','20170525'],'ratio1':[1,0.98,0.97]})
df['date'] = pd.to_datetime(df['date'])

# Create the line plot
plt.plot(df['date'], df['ratio1'])

# Set major locator and formatter for the x-axis
plt.gca().xaxis.set_major_locator(dates.DayLocator())
plt.gca().xaxis.set_major_formatter(dates.DateFormatter('%d\n\n%a'))

# Invert the x-axis for chronological order
plt.gca().invert_xaxis()

# Autofmt the x-axis for optimal placement of dates
plt.gcf().autofmt_xdate(rotation=0, ha="center")

# Display the plot
plt.show()</code>

Ce code révisé générera un tracé linéaire avec des dates formatées avec précision sur l'axe des X.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn