【问题标题】:Python matplotlib and plotting date time informationPython matplotlib 和绘制日期时间信息
【发布时间】:2017-06-02 10:18:02
【问题描述】:

我从 API 生成了以下数据。我现在正在尝试使用matplotlib 绘制一个图表,显示那些日子的日期和湿度。问题是那些日子我有不同的时间。如何按时间过滤,以便仅显示我选择的时间。我附上了一个 python 文件,其中只有从我的程序中取出的相关数据才能做到这一点。

我是matplotlibnumpy 的新手

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.dates as mdates
from datetime import datetime

'''This is the data generated'''

date=[datetime.datetime(2017, 6, 2, 12, 0),
  datetime.datetime(2017, 6, 2, 15, 0),
  datetime.datetime(2017, 6, 2, 18, 0),
  datetime.datetime(2017, 6, 2, 21, 0),
  datetime.datetime(2017, 6, 3, 0, 0),
  datetime.datetime(2017, 6, 3, 3, 0),
  datetime.datetime(2017, 6, 3, 6, 0),
  datetime.datetime(2017, 6, 3, 9, 0),
  datetime.datetime(2017, 6, 3, 12, 0),
  datetime.datetime(2017, 6, 3, 15, 0),
  datetime.datetime(2017, 6, 3, 18, 0),
  datetime.datetime(2017, 6, 3, 21, 0),
  datetime.datetime(2017, 6, 4, 0, 0),
  datetime.datetime(2017, 6, 4, 3, 0),
  datetime.datetime(2017, 6, 4, 6, 0),
  datetime.datetime(2017, 6, 4, 9, 0),
  datetime.datetime(2017, 6, 4, 12, 0),
  datetime.datetime(2017, 6, 4, 15, 0),
  datetime.datetime(2017, 6, 4, 18, 0),
  datetime.datetime(2017, 6, 4, 21, 0),
  datetime.datetime(2017, 6, 5, 0, 0),
  datetime.datetime(2017, 6, 5, 3, 0),
  datetime.datetime(2017, 6, 5, 6, 0),
  datetime.datetime(2017, 6, 5, 9, 0),
  datetime.datetime(2017, 6, 5, 12, 0),
  datetime.datetime(2017, 6, 5, 15, 0),
  datetime.datetime(2017, 6, 5, 18, 0),
  datetime.datetime(2017, 6, 5, 21, 0),
  datetime.datetime(2017, 6, 6, 0, 0),
  datetime.datetime(2017, 6, 6, 3, 0),
  datetime.datetime(2017, 6, 6, 6, 0),
  datetime.datetime(2017, 6, 6, 9, 0),
  datetime.datetime(2017, 6, 6, 12, 0),
  datetime.datetime(2017, 6, 6, 15, 0),
  datetime.datetime(2017, 6, 6, 18, 0),
  datetime.datetime(2017, 6, 6, 21, 0)]

  humidity=[69, 70, 64, 68, 76, 81, 76, 76, 67, 54,
      53, 59, 68, 81, 80, 73, 65, 59, 57, 64,
      92, 82, 81, 81, 71, 63, 60, 61, 67, 76,
      80, 75, 67, 83, 81, 82]

【问题讨论】:

    标签: python datetime numpy matplotlib


    【解决方案1】:

    使用可以简化这种情况的 pandas。 代码是:

    import datetime
    import pandas as pd
    import matplotlib.pyplot as plt
    
    '''This is the data generated'''
    
    date=[datetime.datetime(2017, 6, 2, 12, 0),
      datetime.datetime(2017, 6, 2, 15, 0),
      datetime.datetime(2017, 6, 2, 18, 0),
      ...,
      datetime.datetime(2017, 6, 6, 15, 0),
      datetime.datetime(2017, 6, 6, 18, 0),
      datetime.datetime(2017, 6, 6, 21, 0)]
    
    humidity=[69, 70, 64, 68, 76, 81, 76, 76, 67, 54,
          53, 59, 68, 81, 80, 73, 65, 59, 57, 64,
          92, 82, 81, 81, 71, 63, 60, 61, 67, 76,
          80, 75, 67, 83, 81, 82]
    
    df = pd.DataFrame(humidity, index=date)
    df.plot(figsize=(16, 6), marker='o')
    plt.show()
    

    这为您提供了以下图表:

    也可以使用纯 matplotlib 和更多自定义图形来完成。 示例如下:

    import datetime
    import matplotlib.pyplot as plt
    
    '''This is the data generated'''
    
    date=[datetime.datetime(2017, 6, 2, 12, 0),
      datetime.datetime(2017, 6, 2, 15, 0),
      datetime.datetime(2017, 6, 2, 18, 0),
      ...,
      datetime.datetime(2017, 6, 6, 15, 0),
      datetime.datetime(2017, 6, 6, 18, 0),
      datetime.datetime(2017, 6, 6, 21, 0)]
    
    humidity=[69, 70, 64, 68, 76, 81, 76, 76, 67, 54,
          53, 59, 68, 81, 80, 73, 65, 59, 57, 64,
          92, 82, 81, 81, 71, 63, 60, 61, 67, 76,
          80, 75, 67, 83, 81, 82]
    
    plt.figure(figsize=(16,9), dpi=100)
    OX_ticks_str = [dateRef.strftime('%Y-%m-%d %H:%M') for dateRef in date]
    OX_ticks_pos = range(len(humidity))
    plt.plot(range(len(humidity)), humidity, color='b', alpha=1.0, marker='o', ms=3, mfc='b', mec='b', label='Humdity')
    plt.title('Humidity', weight='bold')
    plt.xticks(OX_ticks_pos, OX_ticks_str, rotation=40, horizontalalignment='right', fontsize=7)
    plt.grid()
    plt.legend(loc='upper left', fancybox=True, fontsize='large', framealpha=0.5)
    plt.tight_layout()
    plt.show()
    

    在这种情况下,它会为您提供以下图表:

    【讨论】:

    • 我仍然无法运行它,我还没有获得熊猫。我只想能够在 x 轴上使用 matplotlib 绘制时间。时间格式为 datetime.datetime(2017, 6, 9, 21, 0)'。这是多维列表中保存的数据: [datetime.datetime(2017, 6, 9, 0, 0), datetime.datetime(2017, 6, 9, 3, 0), datetime.datetime(2017, 6, 9) , 6, 0), datetime.datetime(2017, 6, 9, 9, 0), datetime.datetime(2017, 6, 9, 12, 0), datetime.datetime(2017, 6, 9, 15, 0) , datetime.datetime(2017, 6, 9, 18, 0), datetime.datetime(2017, 6, 9, 21, 0)] 因为我减小了数据集的大小。
    • 我怎样才能简单地绘制这些数据。我想在 x 轴上显示时间。我是 matplotlib 的新手,并且一直在寻找几天来解决这个问题。
    • 您是否尝试过第二个选项?它只使用 matplotlib,它应该可以工作。我使用的是 1.5.1 版本,但查看文档它应该适用于大多数版本,因为没有使用任何特定/奇怪的内容。您能否运行我发布的第二个代码(当然,将所有日期列表更改为完整的)并更好地解释错误?
    • 这是我得到的错误: Traceback(最近一次调用最后一次):文件“/Users/nosh/Desktop/c.py”,第 20 行,在 OX_ticks_str = [dateRef .strftime('%Y-%m-%d %H:%M') for dateRef in date] 文件“/Users/nosh/Desktop/c.py”,第 20 行,在 OX_ticks_str = [dateRef. strftime('%Y-%m-%d %H:%M') for dateRef in date] AttributeError: 'ellipsis' object has no attribute 'strftime'
    • ellipsis'?那是什么?不知道。您是否正在使用 python 并正确导入datetime?您必须完全使用 import datetime 而不是 from datetime import datetime
    猜你喜欢
    • 2019-05-14
    • 2019-12-14
    • 2013-10-20
    • 2021-12-29
    • 2016-05-15
    • 1970-01-01
    • 2020-04-07
    • 2015-12-23
    • 2014-03-24
    相关资源
    最近更新 更多