web-dev-qa-db-fra.com

Modifier les ticks de date pour la parcelle de pandas

Vous trouverez ci-dessous un graphique des données simulées, qui contient les xticks que je souhaite modifier. Par défaut, le fichier pd.df.plot sélectionne les dates espacées d'environ 3 mois. Mais ce que je veux, c'est que chaque mois soit une tique. Quelle est la meilleure façon de procéder? Qu'en est-il des tiques saisonniers? Merci d'avance. 

 enter image description here

5
MLhacker

Tout d’abord, vous devez convertir les objets Date pandas en objets Date Python. Cette conversion est nécessaire en raison des fonctions de conversion de date internes à matplotlib. Puis utilisez les fonctions de matplotlib.dates pour définir le formateur souhaité et cochez les positions comme ici:

import pandas as pd
import numpy as np
import matplotlib.pylab as plt
import matplotlib.dates as mdates

# convert date objects from pandas format to python datetime
index = pd.date_range(start = "2015-07-01", end = "2017-01-01", freq = "D")
index = [pd.to_datetime(date, format='%Y-%m-%d').date() for date in index]
data = np.random.randint(1,100, size=len(index))
df = pd.DataFrame(data=data,index=index, columns=['data'])
print (df.head())

ax = df.plot()
# set monthly locator
ax.xaxis.set_major_locator(mdates.MonthLocator(interval=1))
# set formatter
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y'))
# set font and rotation for date tick labels
plt.gcf().autofmt_xdate()

plt.show()

Pour les étiquettes de saison, vous devez la construire vous-même, puis la définir avec la fonction plt.setp (pour le mois 02, définissez l'étiquette winter, 04 - spring etc.): plt.setp(new_labels, rotation=90, fontsize=9).

 enter image description here

tête de df:

            data
2015-07-01    26
2015-07-02    33
2015-07-03    46
2015-07-04    69
2015-07-05    17
7
Serenity

J'ai eu du mal à obtenir @Serenity answer au travail parce que je travaille directement avec Matplotlib au lieu de représenter graphiquement le jeu de données Pandas. Donc, si vous êtes l'un d'entre eux, ma réponse pourrait aider.

Tracer avec Matplotlib.plot ()

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# Process dataset
bitcoin['Date'] = pd.to_datetime(bitcoin['Date'])
bitcoin['Open'] = pd.to_numeric(bitcoin['Open'])

# Plot
plt.figure()
plt.plot(bitcoin['Date'], bitcoin['Open'])
ax = plt.gca()
ax.xaxis.set_major_locator(mdates.MonthLocator(interval=4))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y'))
plt.gcf().autofmt_xdate() # Rotation
plt.show()
bitcoin[['Date', 'Open']].head()

    Date        Open
0   2017-09-05  4228.29
1   2017-09-04  4591.63
2   2017-09-03  4585.27
3   2017-09-02  4901.42
4   2017-09-01  4701.76

 Bitcoin price chart

0
zurfyx