I'm trying to plot multiple time series using a pandas dataframe. The dataframe contains more than 100 registers.
From the panda's documentation I've read that when pandas.df.plot() is executed this is also executed with gcf().autofmt_xdate(). I want to put my custom datetime format but when I tried my custom date format is overlapped over the date given by default by pandas plot. ¿Is there a way to skip gcf().autofmt_xdate() on plot creation? ¿How can i provide to panda a custom datetime format?
Here is the generated plot.
Here is the python code.
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
from pandas import Series
import pickle
datos = pickle.load(open("datos_reporte.pickle", "r"))
reload(plt)
series_o = []
series_p_h = []
series_p_d = []
series_names = []
for cod_estacion in datos.keys():
x = [d[0] for d in datos[cod_estacion]['historial_semanal']]
y = [d[1] for d in datos[cod_estacion]['historial_semanal']]
s = Series(y, x)
series_o.append(s.groupby(level=0).first())
df1 = pd.concat(series_o, join='outer', axis=1)
interval = int(len(df1) / 12)
df1.columns = series_names
ax = plt.figure(figsize=(7,5), dpi=100).add_subplot(111)
df1.plot(ax=ax)
ax.xaxis.set_major_locator(mdates.HourLocator(interval=200))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d-%H:%S'))
ax.xaxis.grid(True, which="minor")
plt.title("Datos observados")
plt.ylabel('Caudal m^3/s')
plt.xlabel('Fecha')
plt.legend(loc=0,prop={'size': 7})
plt.xticks(rotation='vertical', fontsize = 8)
plt.subplots_adjust(bottom=.2)
plt.show()