Matplotlib:制作折线图日期时间x轴标签看起来像Excel

时间:2015-04-01 17:45:12

标签: python pandas matplotlib

我有一个简单的pandas DataFrame,其年度值我将绘制为折线图:

import matplotlib.pyplot as plt
import pandas as pd

>>>df
            a   b
2010-01-01  9.7 9.0
2011-01-01  8.8 14.2
2012-01-01  8.4 7.6
2013-01-01  9.6 8.4
2014-01-01  8.2 5.5

X轴的预期格式是不对标签使用边距:

fig  = plt.figure(0)
ax = fig.add_subplot(1, 1, 1)
df.plot(ax = ax)

matplotlib figure

但我想强制将值绘制在年中范围内,就像在excel中一样:

excel figure

我尝试过设置x轴边距:

ax.margins(xmargin = 1)

但可以看出没有区别。

1 个答案:

答案 0 :(得分:3)

如果您只想移动日期,可以尝试在最后添加此行:

ax.set_xlim(ax.get_xlim()[0] - 0.5, ax.get_xlim()[1] + 0.5) 

如果您还需要格式化日期,您可以修改索引或在绘制的刻度中进行更改,如下所示: (假设您df.indexdatetime个对象)

ax.set_xticklabels(df.index.to_series().apply(lambda x: x.strftime('%d/%m/%Y')))

这会将日期格式化为Excel示例。

或者您可以将index更改为您想要的内容,然后致电.plot()

df.index = df.index.to_series().apply(lambda x: x.strftime('%d/%m/%Y'))
print df.index.tolist()

['01/01/2010', '01/01/2011', '01/01/2012', '01/01/2013', '01/01/2014']

而且,如果index不是datetime,则需要先将其转换为:

df.index = pd.to_datetime(df.index)