我有以下持久性问题:
以下代码应绘制一条直线:
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在没有提交周末日期的情况下按照我的日期(仅限工作日)进行操作?
>>>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')
答案 0 :(得分:4)
plot_date
有一个技巧,它将日期转换为1-1-1以来的天数并使用这些数字进行绘制。将刻度转换为日期以便绘制漂亮的刻度标签。因此,每天使用plot_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之间的部分代表五天,而不是七天。