【问题标题】:How to plot specific, and corresponding elements of two lists如何绘制两个列表的特定和对应元素
【发布时间】:2021-07-19 09:01:02
【问题描述】:

假设我有两个列表,一个名为 date,一个名为 prcp。

date = [datetime.datetime(1948, 1, 1, 0, 0), datetime.datetime(1948, 1, 2, 0, 0), datetime.datetime(1948, 1, 3, 0, 0), datetime.datetime(1948, 1, 4, 0, 0), datetime.datetime(1948, 1, 5, 0, 0)]

prcp = [0.47,0.59,0.42,0.31,0.17]

这些值相互对应,我可以用 pyplot 绘制它们,如下所示:

pyplot.scatter(date,prcp)

这将在 x 轴上绘制日期,在 y 轴上绘制 prcp。很棒。

假设我删除了指定日期期间之外的任何元素,以便日期变为:

date = [datetime.datetime(1948, 1, 2, 0, 0), datetime.datetime(1948, 1, 3, 0, 0), datetime.datetime(1948, 1, 4, 0, 0)]

如果我现在只为我新减少的日期列表绘制数据,pyplot 会出错:

ValueError: x and y must be the same size

如何获取 prcp 列表以便我可以用相应的日期值绘制它?

谢谢!

【问题讨论】:

    标签: python list datetime matplotlib


    【解决方案1】:

    您可以使用index() 进行过滤。

    例子:

    >>> date = [datetime.datetime(1948, 1, 1, 0, 0), datetime.datetime(1948, 1, 2, 0, 0), datetime.datetime(1948, 1, 3, 0, 0), datetime.datetime(1948, 1, 4, 0, 0), datetime.datetime(1948, 1, 5, 0, 0)]
    >>> prcp = [0.47,0.59,0.42,0.31,0.17]
    >>> selected_dates = [datetime.datetime(1948, 1, 2, 0, 0), datetime.datetime(1948, 1, 3, 0, 0), datetime.datetime(1948, 1, 4, 0, 0)]
    >>> selected_prcp = [prcp[date.index(d)] for d in selected_dates]
    >>> selected_prcp
    [0.59, 0.42, 0.31]
    

    您可以根据选择日期的方式更有效地进行过滤。以上假设selected_datesdate 中唯一元素的任意子集。

    【讨论】:

      【解决方案2】:
      import numpy as np
      from datetime import datetime
      import matplotlib.pyplot as plt
      import matplotlib.dates as mdates
      
      # specify the data
      date = np.array([datetime(1948, 1, 1, 0, 0), datetime(1948, 1, 2, 0, 0),
                       datetime(1948, 1, 3, 0, 0), datetime(1948, 1, 4, 0, 0), datetime(1948, 1, 5, 0, 0)])
      prcp = np.array([0.47, 0.59, 0.42, 0.31, 0.17])
      
      # create a Boolean mask
      mask = (date > datetime(1948, 1, 1, 0, 0)) & (date < datetime(1948, 1, 5, 0, 0))
      
      # display the mask
      print(mask)
      [out]:
      array([False,  True,  True,  True, False])
      
      # select data from date and prcp
      selected_date = date[mask]
      selected_prcp = prcp[mask]
      
      # display selected_date and selected_prcp
      print(selected_date)
      [out]:
      array([datetime.datetime(1948, 1, 2, 0, 0),
             datetime.datetime(1948, 1, 3, 0, 0),
             datetime.datetime(1948, 1, 4, 0, 0)], dtype=object)
      
      print(selected_prcp)
      [out]:
      array([0.59, 0.42, 0.31])
      

      绘制数据

      • x 轴的默认日期时间格式为'%m-%d %H',对于这个短时间范围,因此格式已更新为包含年份。
      plt.plot(selected_date, selected_prcp, marker='o')
      plt.xticks(rotation=90)
      plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H'))
      plt.show()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-08
        • 2021-11-22
        • 1970-01-01
        相关资源
        最近更新 更多