【问题标题】:plotting all keys of a dictionary which contains list as values (python)绘制包含列表作为值的字典的所有键(python)
【发布时间】:2016-11-09 00:23:09
【问题描述】:

在 python 2.7 中,我有一个大小可以变化的字典。对于每个键,Q1,Q2,Q3.... 我需要绘制字典值,它们是包含日期和整数的列表。

{'Q1': [['20.03.2016', 25], ['21.03.2016', 35], ['22.03.2016', 22], ['23.03.2016
', 50], ['24.03.2016', 50], ['30.03.2016', 50], ['30.03.2016', 50]], 'Q3': [['20
.03.2016', 23], ['21.03.2016', 21], ['22.03.2016', 27], ['23.03.2016', 20], ['24
.03.2016', 20], ['30.03.2016', 20], ['30.03.2016', 20]], 'Q2': [['20.03.2016', 1
5], ['21.03.2016', 12], ['22.03.2016', 15], ['23.03.2016', 15], ['24.03.2016', 1
5], ['30.03.2016', 15], ['30.03.2016', 15]], 'Q5': [['20.03.2016', 320], ['21.03
.2016', 30], ['22.03.2016', 30], ['23.03.2016', 30], ['24.03.2016', 30], ['30.03
.2016', 30], ['30.03.2016', 30]], 'Q4': [['20.03.2016', 130], ['21.03.2016', 10]
, ['22.03.2016', 10], ['23.03.2016', 10], ['24.03.2016', 10], ['30.03.2016', 10]
, ['30.03.2016', 10]], 'Q7': [['23.03.2016', 5], ['24.03.2016', 5], ['30.03.2016
', 5], ['30.03.2016', 5]], 'Q9': [['30.03.2016', 17]], 'Q8': [['24.03.2016', 15]
, ['30.03.2016', 15], ['30.03.2016', 15]]}

如何在一个绘图窗口中绘制所有键,其中包含每个键的线条并根据键名本身进行标记?每行都应该用颜色编码,并显示每个键的所有整数与日期数据点。所以 Q1 线将绘制第二列(整数)与第一列(日期)

['20.03.2016', 25], 
['21.03.2016', 35],
['22.03.2016', 22],
['23.03.2016', 50],
['24.03.2016', 50], 
['30.03.2016', 50],
['30.03.2016', 50]

每一行都可以用颜色编码,并且应该有图例中键的标签。我在 python 中使用 numpy 和 matplotlib 库。

【问题讨论】:

  • 您能否重新表述一下您的问题?我在想,如果您创建一个按数字表示的日期图,其中每个键都用一种颜色表示,它对您有用吗?
  • 使用哪个绘图库? Matplotlib?
  • @John,是的,你没看错。每个键都应该用颜色编码。所以对于每个键,它应该绘制 list[1] vs list[0] (列表中的两个列)
  • @Hannes 是的,Matplotlib

标签: python list dictionary plot


【解决方案1】:

我们可以简单地遍历字典项,然后使用zip() 解包这些值。 plot()label= 关键字参数将使 legend() 调用自动创建图例。

for key, data_list in data_dict.items():
    dates_str, values = zip(*data_list)  # Unpack
    dates = convert_str_to_dates(dates_str)  # Not handled in example
    plt.plot(dates, values, label=key)
plt.legend()

要解决的是如何从字符串列表转到 matplotlib 可以理解的某种日期对象。不过,这应该很容易在文档中找到。

编辑:使用zip() 解压缩列表列表的诀窍是我的“啊哈!”时刻之一 :)

【讨论】:

  • 谢谢!那很完美!我使用 dates = [dt.datetime.strptime(d,'%d.%m.%Y').date() for d in dates_str] 来处理字符串中的日期。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
  • 2011-05-30
  • 2022-11-27
  • 1970-01-01
  • 1970-01-01
  • 2012-12-18
相关资源
最近更新 更多