J'essaie de tracer des données à partir d'une trame de données de pandas avec un index timedelta et je souhaite personnaliser les graduations temporelles et les étiquettes sur mon axe des x. Cela devrait être simple, mais cela s'avère être un travail difficile.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as dates
## I have a df similar to this
timestamps = pd.date_range(start="2017-05-08", freq="10T", periods=6*6)
timedeltas = timestamps - pd.to_datetime("2017-05-08")
yy = np.random.random((len(timedeltas),10))
df = pd.DataFrame(data=yy, index=timedeltas) # Ok, this is what I have
## Now I want to plot this but I want detailed control of the plot so I use matplotlib instead of df.plot
fig,axes=plt.subplots()
axes.plot(df.index.values, df.values)
#axes.plot_date(df.index, df.values, '-')
axes.xaxis.set_major_locator(dates.HourLocator(byhour=range(0,24,2)))
axes.xaxis.set_minor_locator(dates.MinuteLocator(byminute=range(0,24*60,10)))
axes.xaxis.set_major_formatter(dates.DateFormatter('%H:%M'))
plt.show()
Comme vous pouvez le voir, les tiques n'apparaissent même pas. Comment puis-je ajouter des graduations et des libellés majeurs toutes les deux heures et des graduations mineures toutes les 10 minutes, par exemple ?
Bien que je ne sache pas exactement quel est le problème racine, il semble qu'il soit lié aux versions de package utilisées. Lorsque j'exécute votre exemple avec une ancienne distribution python (matplotlib 1.5.1, numpy 1.11.1, pandas 0.18.1 et python 2.7.12), j'obtiens un tracé sans ticks comme vous l'avez décrit.
Cependant, je peux obtenir un tracé avec les bonnes ticks
en exécutant le code ci-dessous avec une distribution python récente (matplot 2.0.1, numpy 1.12.1, pandas 0.19.1 et python 3.6.1).
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as dates
timestamps = pd.date_range(start="2017-05-08", freq="10T", periods=6*6)
timedeltas = timestamps - pd.to_datetime("2017-05-08")
yy = np.random.random((len(timedeltas),10))
df = pd.DataFrame(data=yy, index=timedeltas)
fig,axes=plt.subplots()
axes.plot_date(df.index, df.values, '-')
axes.xaxis.set_major_locator(dates.HourLocator(byhour=range(0,24,2)))
axes.xaxis.set_minor_locator(dates.MinuteLocator(byminute=range(0,24*60,10)))
axes.xaxis.set_major_formatter(dates.DateFormatter('%H:%M'))
plt.show()
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots