在Matplotlib x轴标签中格式化日期时间

时间:2019-02-04 18:04:23

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

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

enter image description here

如果我打印出数据类型,则时间为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)

enter image description here

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

1 个答案:

答案 0 :(得分:0)

使用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)

enter image description here

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

enter image description here