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.
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)
.
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
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.
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