【问题标题】:Formatting datetime xlabels in matplotlib (pandas df.plot() method)在 matplotlib 中格式化日期时间 xlabels(pandas df.plot() 方法)
【发布时间】:2014-05-30 01:47:17
【问题描述】:

我不知道如何更改这些 x-labels 的格式。理想情况下,我想给他们打电话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')

【问题讨论】:

    标签: python matplotlib pandas


    【解决方案1】:

    只需访问刻度标签并更改它们:

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

    【讨论】:

    【解决方案2】:

    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)
    

    与截断刻度标签字符串相比,这允许使用更通用的格式选项。

    【讨论】:

    • 谢谢!接受你的,因为它让我调用 strftime,因此允许更多格式选项,正如你所指出的那样
    【解决方案3】:

    您可以使用您喜欢的 strftime 准确地传递新标签:

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

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

    【讨论】:

      【解决方案4】:

      对我来说最简单的解决方案是:

      from matplotlib.dates import DateFormatter
      
      date_form = DateFormatter("%Y-%m-%d")
      ax.xaxis.set_major_formatter(date_form)
      

      【讨论】:

        猜你喜欢
        • 2019-04-28
        • 2020-10-30
        • 2017-12-10
        • 2019-06-28
        • 2020-02-02
        • 2017-09-27
        • 2020-12-07
        • 1970-01-01
        • 2018-03-13
        相关资源
        最近更新 更多