matplotlib solo días hábiles sin fines de semana en el eje x con plot_date

Tengo el siguiente problema persistente:

El siguiente código debe dibujar una línea recta:

import numpy as np import pandas as pd import matplotlib.pyplot as plt d = pd.date_range(start="1/1/2012", end="2/1/2012", freq="B") v = np.linspace(1,10,len(d)) plt.plot_date(d,v,"-") 

Pero todo lo que obtengo es una línea irregular porque “plot_date” de alguna manera llena las fechas en “d” los fines de semana.

¿Hay alguna forma de obligar a matplotlib a que tome mis fechas (solo días hábiles) tal como están sin tener que presentarlas con las fechas de los fines de semana?

Línea dentada en lugar de recta

 >>>d DatetimeIndex(['2012-01-02', '2012-01-03', '2012-01-04', '2012-01-05', '2012-01-06', '2012-01-09', '2012-01-10', '2012-01-11', '2012-01-12', '2012-01-13', '2012-01-16', '2012-01-17', '2012-01-18', '2012-01-19', '2012-01-20', '2012-01-23', '2012-01-24', '2012-01-25', '2012-01-26', '2012-01-27', '2012-01-30', '2012-01-31', '2012-02-01'], dtype='datetime64[ns]', freq='B') 

plot_date hace un truco, convierte las fechas en el número de días desde 1-1-1 y utiliza estos números para trazar. Vuelva a convertir las marcas en fechas para dibujar tags de marca agradables. Entonces, usar plot_date cada día cuenta como 1, negocio o no.

Puede trazar sus datos contra un rango uniforme de números, pero si desea fechas como tags de tic-tac, debe hacerlo usted mismo.

 d = pd.date_range(start="1/1/2012", end="2/1/2012", freq="B") v = np.linspace(1,10,len(d)) plt.plot(range(d.size), v) xticks = plt.xticks()[0] xticklabels = [(d[0] + x).strftime('%Y-%m-%d') for x in xticks.astype(int)] plt.xticks(xticks, xticklabels) plt.autoscale(True, axis='x', tight=True) 

introduzca la descripción de la imagen aquí

Pero tenga en cuenta que las tags pueden ser engañosas. El segmento entre 2012-01-02 y 2012-01-09 representa cinco días, no siete.