嘿,我在python中有一个数据框,它的索引设置为日期时间,3列带有整数值,1列带有一些小数,1列是移动平均值。
min_date Full_Name Quotes Ratio MA
2019-10-14 Melissa Felix 2 ... 1.000000 NaN
2019-10-15 Melissa Felix 3 ... 0.000000 NaN
2019-10-16 Melissa Felix 4 ... 0.750000 NaN
2019-10-17 Melissa Felix 3 ... 0.666667 NaN
2019-10-21 Melissa Felix 2 ... 1.000000 NaN
2019-10-22 Melissa Felix 3 ... 0.666667 NaN
2019-10-23 Melissa Felix 3 ... 0.000000 NaN
2019-10-24 Melissa Felix 6 ... 0.333333 NaN
2019-10-25 Melissa Felix 4 ... 0.750000 NaN
2019-10-28 Melissa Felix 3 ... 0.333333 0.550000
2019-10-29 Melissa Felix 5 ... 0.400000 0.490000
2019-10-30 Melissa Felix 3 ... 1.000000 0.590000
2019-11-07 Melissa Felix 5 ... 0.400000 0.555000
2019-11-08 Melissa Felix 5 ... 0.000000 0.488333
2019-11-09 Melissa Felix 7 ... 0.285714 0.416905
2019-11-14 Melissa Felix 2 ... 0.500000 0.400238
2019-11-15 Melissa Felix 1 ... 0.000000 0.400238
2019-11-18 Melissa Felix 7 ... 0.428571 0.409762
2019-11-19 Melissa Felix 4 ... 0.250000 0.359762
2019-11-20 Melissa Felix 4 ... 0.000000 0.326429
2019-11-21 Melissa Felix 2 ... 0.500000 0.336429
2019-11-26 Melissa Felix 3 ... 0.000000 0.236429
2019-11-27 Melissa Felix 2 ... 0.000000 0.196429
2019-11-29 Melissa Felix 4 ... 0.000000 0.196429
当我简单地用
mra2['MA'].plot()
我得到以下信息:
但是,我希望x轴偏移2天,以便x标签为2019-10-13,2019-10-20,2019-10-27等。数据将每周都刷新一次,那么我怎么做才能使x轴始终落入此序列?
答案 0 :(得分:0)
IIUC,您可以使用matplotlib.dates.WeekdatLocator
:
import matplotlib.dates as mdates
ax = mra2['MA'].plot()
ax.set_xlim(left=pd.to_datetime('2019-10-13'))
ax.xaxis.set_major_locator(mdates.WeekdayLocator(byweekday=mdates.SU))
输出:
答案 1 :(得分:0)
一般的答案是,您总是可以这样屏蔽日期时间:
import datetime
import matplotlib.pyplot as plt
start_date = datetime.datetime(2019, 10, 13)
end_date = datetime.datetime(2019, 11, 29)
mask = (mra2['min_date'] >= start_date) & (mra2['min_date'] <= end_date)
new_mra2= mra2.loc[mask].reset_index(drop=True)
plt.plot(new_mra2['min_date'], new_mra2['MA'])
如果要动态执行此操作,例如您希望间隔5周,可以执行以下操作:
from datetime import datetime, timedelta
import matplotlib.pyplot as plt
start_date = datetime.today() - timedelta(days=35)
end_date = datetime.today()
mask = (mra2['min_date'] >= start_date) & (mra2['min_date'] <= end_date)
new_mra2= mra2.loc[mask].reset_index(drop=True)
plt.plot(new_mra2['min_date'], new_mra2['MA'])