【问题标题】:Plot dates vs values in Python在 Python 中绘制日期和值
【发布时间】:2014-09-12 19:58:33
【问题描述】:

我有一个非常标准的数据集,它有 2 列,1 列用于日期,1 列用于值。我已将它们放入两个数组中:

dates
['1/1/2014', '1/2/2014', '1/3/2014', ...]

values
[1423, 4321, 1234, ...]

如何创建一个简单的折线图,其中 y 轴为“值”,x 轴为“日期”?

我的尝试:

我可以在 1 行中仅使用“值”绘制“Hello world”线图(太棒了):

import numpy as np
import matplotlib.pyplot as plt

plt.plot(values)

接下来,让我们添加“日期”作为 x 轴。在这一点上,我被困住了。如何将我的“日期”数组(即字符串)转换为可绘制的数组?

看示例,我相信我们应该将字符串转换为 Python Date 对象。让我们导入这些库:

import datetime
import matplotlib.dates

好的,现在我可以将字符串转换为日期time.strptime(dates[1], '%m/%d/%Y')。如何转换整个数组?我可以写一个循环,但假设有更好的方法。

我不是 100% 确定我是否走在正确的道路上,以使某些东西可用于“日期”与“价值”。如果您知道制作此图表的代码(我假设您了解 Python + 库后它是非常基本的),请告诉我。

【问题讨论】:

标签: python datetime matplotlib


【解决方案1】:

好的,知道它是 1 班轮。操作方法如下:

所以你从你的值和日期(作为字符串)数组开始:

dates = ['1/1/2014', '1/2/2014', '1/3/2014', ...]

values = [1423, 4321, 1234, ...]

然后将字符串中的日期转换为日期对象:

date_objects = [datetime.strptime(date, '%m/%d/%Y').date() for date in dates]

然后只是情节。

plt.plot(date_objects, values)

【讨论】:

    【解决方案2】:

    请记住,您可以使用 xticks 并使用任何您想要的值来代替值。所以,你可以做一个

    xVals = range(len(values))
    plot(xVals, values)
    xticks(xVals, dates)
    

    如果你的日期像你一样是线性的,这没关系。否则,您总是可以获得一个量化日期的数字(从第一天算起的天数(参见datetime 模块)并将其用于xVals

    【讨论】:

    • 我假设您的意思是 plt.plot(xVals, values)plt.xticks(xVals, dates)。使用这些前缀运行上面的代码会返回一个 xtick 对象列表。还有其他的吗?
    • 是的。 plt....xticks 只会将刻度标签放入您指定的值。例如,在 iPython 上,打开 figure()plot([1,2,3], [5,4,3])。然后做一个xticks([1, 1.57]) 看看会发生什么。现在做一个xticks([1, 1.57], ['1', '$\pi / 2$']) 看看会发生什么。它像魔术一样工作。我总是对 matplotlib 感到惊讶。
    【解决方案3】:

    这是我的代码:

    date = []
    for time_val in value:
        date.append(datetime(*time.strptime(time_val, "%m/%d/%Y")[:3]))
    
    fig, ax = plt.subplots()
    ax.plot_date(date, value_list)
    date_format = mdates.DateFormatter("%m/%d/%Y")
    ax.xaxis.set_major_formatter(date_format)
    ax.autoscale_view()
    title_name = 'plot based on time'
    ax.set_title(title_name)
    y_label = 'values'
    ax.set_ylabel(y_label)
    ax.grid(True)
    
    fig.autofmt_xdate()
    
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-01
      • 1970-01-01
      • 2017-11-26
      相关资源
      最近更新 更多