Diagtwig de pandas: modifica los xticks mayores y menores para las fechas.

Estoy ttwigndo dos series de pandas. El índice es una fecha (1-1 a 12-31)

s1.plot() s2.plot() 

pd.plot () interpreta las fechas y las asigna a los valores de los ejes como tales:

introduzca la descripción de la imagen aquí

Me gustaría modificar las marcas principales para que sean el primero de cada mes y las marcas menores para los días intermedios.

Esto funciona:

 %matplotlib notebook import matplotlib as mpl import matplotlib.dates as mdates import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv('data.csv') df['Date'] = pd.to_datetime(df['Date']).dt.strftime('%m-%d') s2014max = df2014.groupby(['Date'], sort=True)['Data_Value'].max()/10 s2014min = df2014.groupby(['Date'], sort=True)['Data_Value'].min()/10 #remove the leap day and convert to datetime for plotting s2014min = s2014min[s2014min.index != '02-29'] s2014max = s2014max[s2014max.index != '02-29'] dateslist = s2014min.index.tolist() dates = [pd.datetime.strptime(date, '%m-%d').date() for date in dateslist] plt.figure() ax = plt.gca() ax.xaxis.set_major_locator(mdates.MonthLocator()) ax.xaxis.set_minor_locator(mdates.DayLocator()) monthFmt = mdates.DateFormatter('%b') dayFmt = mdates.DateFormatter('%d') ax.xaxis.set_major_formatter(monthFmt) ax.xaxis.set_minor_formatter(dayFmt) ax.tick_params(direction='out', pad=15) s2014min.plot() s2014max.plot() 

Esto da como resultado que no haya garrapatas:

introduzca la descripción de la imagen aquí

Una forma posible es usar matplotlib para trazar las fechas en lugar de los pandas.

 import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates import numpy as np dates = pd.date_range("2016-01-01", "2016-12-31" ) y = np.cumsum(np.random.normal(size=len(dates))) df = pd.DataFrame({"Dates" : dates, "y": y}) fig, ax = plt.subplots() ax.plot_date(df["Dates"], df.y, '-') ax.xaxis.set_major_locator(mdates.MonthLocator()) ax.xaxis.set_minor_locator(mdates.DayLocator()) monthFmt = mdates.DateFormatter('%b') ax.xaxis.set_major_formatter(monthFmt) plt.show() 

introduzca la descripción de la imagen aquí

Estabas tan cerca! Todo lo que tenía que hacer era agregar los formateadores de manera similar a como lo hizo la otra respuesta. Aquí hay una muestra de trabajo similar a su código (tenga en cuenta que hice el mío en el portátil ipython, por lo tanto, el %matplotlib inline ).

 %matplotlib inline import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates from datetime import datetime, timedelta from random import random y = [random() for i in range(25)] x = [(datetime.now() - timedelta(days=i)) for i in range(25)] x.reverse() s = pd.Series(y, index=x) # NOTE: S, not df, since you said you were using series # format the ticks ax = plt.gca() ax.xaxis.set_major_locator(mdates.MonthLocator()) ax.xaxis.set_minor_locator(mdates.DayLocator()) monthFmt = mdates.DateFormatter('%b') dayFmt = mdates.DateFormatter('%d') ax.xaxis.set_major_formatter(monthFmt) # This is what you needed ax.xaxis.set_minor_formatter(dayFmt) # This is what you needed ax.tick_params(direction='out', pad=15) # format the coords message box s.plot(figsize=(10,3)) 

que se verá así: introduzca la descripción de la imagen aquí