【问题标题】:Using numpy index for dates in matplotlib在 matplotlib 中使用 numpy 索引作为日期
【发布时间】:2017-01-27 00:41:03
【问题描述】:

我有一个如下所示的 numpy 数组:

                              Close
Date                               
2016-12-22                    11.43
2016-12-23                    11.44
2016-12-27                    11.99
2016-12-28                    12.95
2016-12-29                    13.37

我只想要日期,而不是月份或年份,并将其用作 matplotlib 图中的 X 轴。

我用过

np.index.day 

提取日期。结果如下所示:

[22 23 27 28 29]

但是当我将它们用于 X 轴时:

plt.xlim(np,5)

我得到 ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()。 np.tolist() 没有帮助。什么会使这项工作?

【问题讨论】:

    标签: python numpy matplotlib


    【解决方案1】:

    如果我正确理解您的问题,您想从数组中提取天数,然后相应地设置绘图的 x 限制。你可以这样做:

    limits = np.index.day
    plt.xlim(limits[0], limits[-1])
    

    您的plt.xlim(np, 5) 行没有任何意义,因为您将np 模块和整数5 作为参数传递给xlim()

    plt.xlim() 接受 x 轴上的最小和最大限制的数值(请参阅docs)。在上面的示例中,我们从 numpy 数组中获取天数,并将结果数组的第一个元素设置为最小 x 值,将最后一个元素设置为最大 x 值。


    26/01/20174 更新:

    如果您想绘制跨多个月的日期范围,最好使用相应的日期时间对象并相应地格式化 x 轴。

    我将构建一个简单的示例,绘制从 2016-12-29 到 2017-01-02 的数据:

    import pandas as pd
    import matplotlib.pyplot as plt
    
    from matplotlib.dates import DayLocator, DateFormatter
    
    a = pd.DataFrame.from_dict({'Date': pd.date_range('2016-12-29', '2017-01-02'), 'Close': (11.43, 11.44, 11.99, 12.95, 13.37)}).set_index('Date')
    print(a)
    
    days = DayLocator()
    daysFmt = DateFormatter('%d')
    
    fig, ax = plt.subplots()
    
    ax.plot_date(a.index, a.Close)
    ax.xaxis.set_major_locator(days)
    ax.xaxis.set_major_formatter(daysFmt)
    
    plt.show()
    

    结果:

                Close
    Date
    2016-12-29  11.43
    2016-12-30  11.44
    2016-12-31  11.99
    2017-01-01  12.95
    2017-01-02  13.37
    

    【讨论】:

    • 我试过 plt.xlim(limits[0], limits[-1]),但它没有画出任何线条。只是 X-Y 轴。而 x 轴仅从 22 变为 23。
    • 我想我明白为什么这不起作用。因为它们是日期,所以它们每个月都重新开始。所以如果上面的数组包含 2017-1-1,X 轴认为你是从 22 数到 1。
    • 我已经更新了我的答案,其中包含一个绘制多个月数据的示例。我希望这现在可以回答您的问题。
    猜你喜欢
    • 2019-09-15
    • 1970-01-01
    • 2018-09-23
    • 2016-05-29
    • 1970-01-01
    • 2019-07-12
    • 2020-11-21
    • 2023-04-10
    相关资源
    最近更新 更多