Python 仅matplotlib工作日,x轴上无周末,带绘图日期

Python 仅matplotlib工作日,x轴上无周末,带绘图日期,python,matplotlib,Python,Matplotlib,我一直有以下问题: 以下代码应绘制一条直线: 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,"-") 但我得到的只是一条参差不齐的线,因为“plot_date”以某种方式用周末来填充“

我一直有以下问题:

以下代码应绘制一条直线:

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,"-")
但我得到的只是一条参差不齐的线,因为“plot_date”以某种方式用周末来填充“d”中的日期

有没有办法强迫matplotlib按原样记录我的日期(仅限工作日),而不用周末日期


plot_date
有一个技巧,它将日期转换为从1-1-1开始的天数,并使用这些数字进行绘图,然后再次将刻度转换为日期,以便绘制漂亮的刻度标签。因此,使用
plot\u date
每天计算为1,无论是否为业务

您可以根据统一的数字范围绘制数据,但如果希望日期作为记号标签,则需要自己绘制

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)


但要注意,这些标签可能会产生误导。2012-01-02和2012-01-09之间的时间段代表五天,而不是七天。

我想我也必须自己编写面向日期的定位器?因为YearLocator()、MonthLocator()等不起作用。是的,或者手动设置刻度。当您丢失x轴间隔和时间间隔之间的贴图时,使用时间定位器变得更加棘手。matplotlib提供的日期/时间定位器基于这样的映射。
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)