在dataframe.plot()中移动x轴:Python

时间:2019-12-02 20:25:51

标签: python-3.x pandas plot

嘿,我在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()我得到以下信息:

plot

但是,我希望x轴偏移2天,以便x标签为2019-10-13,2019-10-20,2019-10-27等。数据将每周都刷新一次,那么我怎么做才能使x轴始终落入此序列?

2 个答案:

答案 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))

输出:

enter image description here

答案 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'])