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

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

Patricia Arquette
Patricia Arquetteoriginal
2024-10-28 08:49:02788parcourir

How to Display Dates Correctly on the X-Axis of a Pandas DataFrame Line Plot?

Date d'affichage du tracé de la ligne Pandas Dataframe sur l'axe x

Problème :

Lors de la tentative de tracé un Pandas DataFrame avec des dates sur l'axe des x, la bibliothèque matplotlib produit un formatage imprécis et des dates qui ne correspondent pas correctement aux données.

Réponse :

L'incompatibilité entre les utilitaires datetime de Pandas et Matplotlib est à l'origine de ce problème. Pandas utilise une représentation à virgule flottante non standard pour les objets datetime, qui est incompatible avec les propres méthodes de formatage de date de Matplotlib.

Solution :

Pour résoudre ce problème, il y a Il existe deux approches possibles :

  1. Désactiver le formatage de la date Pandas :

    En définissant x_compat=True lors du traçage du DataFrame, Pandas utilisera la date interne de Matplotlib mécanismes de formatage, permettant un contrôle plus précis sur le formatage de l'axe x.

  2. Utilisez Matplotlib exclusivement pour le traçage et le formatage :

    Au lieu de vous fier sur Pandas pour le traçage de dates, vous pouvez utiliser les propres méthodes de Matplotlib pour gérer les valeurs de date et le formatage. Cela offre une plus grande flexibilité et vous permet de personnaliser le formatage de la date selon vos besoins.

Voici un exemple mis à jour qui illustre les deux approches :

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

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

usePandas = True

# Either use Pandas
if usePandas:
    df = df.set_index('date')
    ax = df.plot(x_compat=True, figsize=(6, 4))
    ax.xaxis.set_major_locator(dates.DayLocator())
    ax.xaxis.set_major_formatter(dates.DateFormatter('%d\n\n%a'))
    ax.invert_xaxis()
    ax.get_figure().autofmt_xdate(rotation=0, ha="center")

# or use Matplotlib
else:
    fig, ax = plt.subplots(figsize=(6, 4))
    ax.plot('date', 'ratio1', data=df)
    ax.xaxis.set_major_locator(dates.DayLocator())
    ax.xaxis.set_major_formatter(dates.DateFormatter('%d\n\n%a'))
    fig.invert_xaxis()

plt.show()</code>

En utilisant l'une ou l'autre de ces approches approches, vous pouvez afficher efficacement les valeurs datetime sur l'axe des x d'un tracé Pandas DataFrame avec un formatage précis.

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