web-dev-qa-db-fra.com

Changer la mise en forme d'un axe datetime dans matplotlib

J'ai une série dont l'index est datetime que je souhaite tracer. Je veux tracer les valeurs de la série sur l'axe y et l'indice de la série sur l'axe x. Series ressemble à ceci:

2014-01-01     7
2014-02-01     8
2014-03-01     9
2014-04-01     8
...

Je génère un graphique en utilisant plt.plot(series.index, series.values). Mais le graphique ressemble à ceci:

graph

Le problème est que j'aimerais avoir seulement l'année et le mois. Cependant, le graphique contient des heures, des minutes et des secondes. Comment puis-je les supprimer pour obtenir la mise en forme souhaitée?

11
Sheryl
# sample data
import numpy as np
import pandas as pd

N = 30
drange = pd.date_range("2014-01", periods=N, freq="MS")
values = {'values':np.random.randint(1,20,size=N)}
df = pd.DataFrame(values, index=drange)

# use formatters to specify major and minor ticks
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

fig, ax = plt.subplots()
ax.plot(df.index, df.values)
ax.set_xticks(df.index)
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m"))
ax.xaxis.set_minor_formatter(mdates.DateFormatter("%Y-%m"))
_=plt.xticks(rotation=90)    

time series plot

15
andrew_reece

Vous pouvez essayer quelque chose comme ceci:

import matplotlib.dates as mdates
import matplotlib.pyplot as plt
df = pd.DataFrame({'values':np.random.randint(0,1000,36)},index=pd.date_range(start='2014-01-01',end='2016-12-31',freq='M'))
fig,ax1 = plt.subplots()
plt.plot(df.index,df.values)
monthyearFmt = mdates.DateFormatter('%Y %B')
ax1.xaxis.set_major_formatter(monthyearFmt)
_ = plt.xticks(rotation=90)

enter image description here

13
Scott Boston