随着时间的推移绘制不同名称的元组列表

杰瑞 :

数据在下面给出,其中每个键:datetime有一个带有字母和相应百分比的元组列表。我正在尝试产生类似于下图的内容,但是由于字母在示例中来来往往的时间内不一致,因此我在字母上遇到了一些麻烦。

{
 datetime.datetime(2020, 2, 14, 0, 0): 
  [('A', 0.1),
  ('B', 0.2),
  ('C', 0.1),
  ('D', 0.25),
  ('E', 0.05)],
 datetime.datetime(2020, 5, 15, 0, 0): 
  [('A', 0.1),
  ('B', 0.14),
  ('C', 0.09),
  ('D', 0.16),
  ('F', 0.6)],   # Note F
  ...
}

在此处输入图片说明

安德里亚·布伦吉诺(Andrea Blengino):

检查此代码:

import pandas as pd
import datetime
import matplotlib.pyplot as plt
import seaborn as sns

data = {
    datetime.datetime(2020, 2, 14, 0, 0):
        [('A', 0.1),
         ('B', 0.2),
         ('C', 0.1),
         ('D', 0.25),
         ('E', 0.05)],
    datetime.datetime(2020, 2, 15, 0, 0):
        [('A', 0.1),
         ('B', 0.14),
         ('C', 0.09),
         ('D', 0.16),
         ('F', 0.6)],
    datetime.datetime(2020, 2, 16, 0, 0):
        [('A', 0.1),
         ('C', 0.25),
         ('D', 0.05),
         ('E', 0.3),
         ('F', 0.15)],
    datetime.datetime(2020, 2, 17, 0, 0):
        [('B', 0.15),
         ('C', 0.25),
         ('D', 0.2),
         ('E', 0.25),
         ('F', 0.05)],
    datetime.datetime(2020, 2, 18, 0, 0):
        [('A', 0.2),
         ('B', 0.3),
         ('C', 0.1),
         ('D', 0.15),
         ('E', 0.25)],
    datetime.datetime(2020, 2, 19, 0, 0):
        [('A', 0.15),
         ('B', 0.15),
         ('C', 0.1),
         ('E', 0.3),
         ('F', 0.25)],
    datetime.datetime(2020, 2, 20, 0, 0):
        [('A', 0.15),
         ('B', 0.25),
         ('C', 0.05),
         ('D', 0.1),
         ('E', 0.35)],
}

df = pd.DataFrame(columns = ['date', 'letter', 'value'])

for key, value in data.items():
    date = pd.DataFrame({'date': [key]*len([couple[0] for couple in value]),
                         'letter': [couple[0] for couple in value],
                         'value': [couple[1] for couple in value]})
    df = df.append(date)


fig, ax = plt.subplots(figsize = (12, 6))

sns.lineplot(ax = ax,
             data = df,
             x = 'date',
             y = 'value',
             hue = 'letter')

plt.show()

为了生成图,我生成了一些与您相似的数据。
然后,我在一个临时数据date框中按日期对数据进行了整理,以便从列表中提取字母和值。然后,我将该临时数据框附加到通用数据框上,df如下所示:

        date letter  value
0 2020-02-14      A   0.10
1 2020-02-14      B   0.20
2 2020-02-14      C   0.10
3 2020-02-14      D   0.25
4 2020-02-14      E   0.05
0 2020-02-15      A   0.10
1 2020-02-15      B   0.14
2 2020-02-15      C   0.09
3 2020-02-15      D   0.16
4 2020-02-15      F   0.60
0 2020-02-16      A   0.10
1 2020-02-16      C   0.25
2 2020-02-16      D   0.05
3 2020-02-16      E   0.30
4 2020-02-16      F   0.15
0 2020-02-17      B   0.15
1 2020-02-17      C   0.25
2 2020-02-17      D   0.20
3 2020-02-17      E   0.25
4 2020-02-17      F   0.05
0 2020-02-18      A   0.20
1 2020-02-18      B   0.30
2 2020-02-18      C   0.10
3 2020-02-18      D   0.15
4 2020-02-18      E   0.25
0 2020-02-19      A   0.15
1 2020-02-19      B   0.15
2 2020-02-19      C   0.10
3 2020-02-19      E   0.30
4 2020-02-19      F   0.25
0 2020-02-20      A   0.15
1 2020-02-20      B   0.25
2 2020-02-20      C   0.05
3 2020-02-20      D   0.10
4 2020-02-20      E   0.35

最后,我按日期绘制值,并根据字母进行拆分sns.lineplot我得到这个情节。

在此处输入图片说明

如您所见,2020-02-14字母F在数据中和绘图中都没有出现。2020-02-15E中没有出现的数据,所以在情节线跳这个日期的下一个值E2020-02-16

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章