【问题标题】:Formatting datetime in Matplotlib x-axis labels在 Matplotlib x 轴标签中格式化日期时间
【发布时间】:2019-06-28 12:46:21
【问题描述】:

我目前有一个如下所示的日期框架:

如果我打印出数据类型,时间是 datetime.date,价格是 numpy.float64。当我尝试使用以下代码绘制此图时,我得到以下图:

from matplotlib import dates
import matplotlib.pyplot as plt

plt.figure(figsize=(20, 10))
plt.plot(df['time'], df['price']*100, color='royalblue', marker='o', markersize=8, linewidth=3.5)

我很困惑为什么 x 轴被弄乱了,以及为什么日期被按原样格式化。理想情况下,我只希望日期与数据框的 time 列中指定的日期相同。其他一些 Stackoverflow 帖子建议使用 DateFormatter,所以我尝试添加以下行:plt.gca().xaxis.set_major_formatter(dates.DateFormatter('%Y-%m-%d'))。但是,我得到错误“列表”对象没有属性“DateFormatter”。希望获得有关如何修复 x 轴上的时间格式的建议(理想情况下,应该只有 5 个刻度对应于指定的时间)。谢谢!

【问题讨论】:

  • 不要将代码中的某些列表与您导入的模块同名。或使用matplotlib.dates.DateFormatter('%Y-%m-%d %H')
  • 检查“日期”的类型
  • @Will 的类型dateslist 从错误中看出。
  • 就这么简单:如果您收到错误'list' object has no attribute 'DateFormatter',那么您的代码中某处就有一个名为dates 的列表。
  • @JaneSully 您的错误表明您正在尝试访问列表对象上的“DateFormatter”属性。这意味着“日期”是您代码中的一个列表,而不是您认为的列表。

标签: python datetime matplotlib datetime-format axis-labels


【解决方案1】:

使用 pandas 的 .plot() 方法来利用 pandas 的格式化能力。该方法有多种选择,值得探索here

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

df = pd.DataFrame({'Price': np.random.randint(20, 60, size=10),
                   'Change': np.random.randint(0, 10, size=10),
                   'Date': pd.date_range('2019-01-01', periods=10, freq='D')})

df.plot(x='Date', 
        y=['Price', 'Change'], 
        marker='o',
        markersize=8, 
        linewidth=2.0)

df.plot(x='Date', 
        y=['Price', 'Change'], 
        marker='o',
        markersize=8, 
        linewidth=2.0,
        color=['green', 'red'],
        subplots=True)

【讨论】:

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