在matplotlib中格式化datetime xlabels(pandas df.plot()方法)

时间:2014-04-15 15:32:43

标签: python matplotlib pandas

我无法弄清楚如何更改这些x标签的格式。理想情况下,我想在它们上面打strftime('%Y-%m-%d')。我尝试了set_major_formatter这样的事情,但没有成功。

import pandas as pd
import numpy as np
date_range = pd.date_range('2014-01-01', '2015-01-01', freq='MS')
df = pd.DataFrame({'foo': np.random.randint(0, 10, len(date_range))}, index=date_range)
ax = df.plot(kind='bar')

ugly x label formats

3 个答案:

答案 0 :(得分:9)

只需访问刻度标签并进行更改:

xtl=[item.get_text()[:10] for item in ax.get_xticklabels()]
_=ax.set_xticklabels(xtl)

enter image description here

答案 1 :(得分:7)

date_range DF中的对象是Timestamp个对象。在每个对象上调用Timestamp.strftime

date_range = pd.date_range('2014-01-01', '2015-01-01', freq='MS')
date_range = date_range.map(lambda t: t.strftime('%Y-%m-%d'))
print date_range
array([2014-01-01, 2014-02-01, 2014-03-01, 2014-04-01, 2014-05-01,
       2014-06-01, 2014-07-01, 2014-08-01, 2014-09-01, 2014-10-01,
       2014-11-01, 2014-12-01, 2015-01-01], dtype=object)

这允许使用更一般的格式化选项而不是截断ticklabel字符串。

答案 2 :(得分:2)

您可以使用首选的strftime准确传递新标签:

ax.set_xticklabels([pandas_datetime.strftime("%Y-%m-%d") for pandas_datetime in df.index])

这不是最漂亮的答案,但它能够始终如一地完成工作。