【问题标题】:Python convert the day of year to month on an axisPython在轴上将一年中的日期转换为月份
【发布时间】:2019-06-04 01:10:59
【问题描述】:

我有一个时间序列,我想逐年绘制。我希望数据是每天的,但轴每个月显示为“一月”、“二月”等。

目前我可以获得每日数据,但轴是 1-366(一年中的哪一天)。

或者我可以将月轴设为 1、2、3 等(通过将索引更改为 df.index.month),但是数据是月度的。

如何将年轴转换为月份?或者我该怎么做?

显示每日数据的代码,但坐标轴错误:

# import
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# create fake time series dataframe
index = pd.date_range(start='01-Jan-2012', end='31-12-2018', freq='D')
data = np.random.randn(len(index))
df = pd.DataFrame(data, index, columns=['Data'])

# pivot to get by day in rows, then year in columns
df_pivot = pd.pivot_table(df, index=df.index.dayofyear, columns=df.index.year, values='Data')
df_pivot.plot()
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.show()

【问题讨论】:

  • “转换为月”究竟是什么意思,考虑到例如2016 年第 60 天是 2 月 29 日,而 2018 年是 3 月 1 日?但是,您当然可以决定某个特定年份并将索引转回该特定年份的日期时间。
  • 我正在考虑使用非闰年。也许这是最好的方法?如果我们要选择 2000 年并将一年中的每一天都转换为其日期时间,然后再格式化?所以第 5 天是 2000 年 1 月 5 日,然后你可以从中去掉月份。你是这个意思吗?如果是这样,我该怎么做?

标签: python pandas datetime matplotlib


【解决方案1】:

简单地将日期时间索引添加到您的透视数据框可能更直接。

df_pivot.index = pd.date_range(
    df.index.max() - pd.Timedelta(days=df_pivot.shape[0]),
    freq='D', periods=df_pivot.shape[0])

df_pivot.plot()
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.show()

生成的图具有所需的轴:

此方法还具有优于公认答案的优势,无论您的开始和结束日期如何。例如,如果您将 index 的结束日期更改为 end='30-Jun-2018',则轴会很好地适应数据:

【讨论】:

    【解决方案2】:

    这可以使用xticks function 来完成。只需在plt.show()前添加以下代码:

    plt.xticks(np.linspace(0,365,13)[:-1], ('Jan', 'Feb' ... 'Nov', 'Dec'))
    

    或以下使月份名称出现在月中:

    plt.xticks(np.linspace(15,380,13)[:-1], ('Jan', 'Feb' ... 'Nov', 'Dec'))
    

    【讨论】:

    • 也许你的意思是plt.xticks(np.linspace(0,365,13)[:-1], ('Jan', 'Feb' ... 'Nov', 'Dec'))
    • @ImportanceOfBeingErnest 你说得对,我误读了文档的那一部分。我已更新我的答案以包含此内容。
    • 是的,这很好用。我猜它不是 100% 准确的,但在图表上它是不可见的。感谢您快速准确的回复。
    猜你喜欢
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2014-12-29
    相关资源
    最近更新 更多