从列表中绘制元素

时间:2019-04-24 13:40:47

标签: python matplotlib

假设我有一个列表列表,例如:

['010', '01', '7']
['010', '02', '6']
['010', '03', '24']
['010', '04', '6']
['015', '02', '8']
['015', '03', '27']
['015', '04', '27']
['020', '01', '130']
['020', '02', '140']
['020', '03', '202']
['020', '04', '3']
['021', '01', '3']
['021', '02', '4']
['021', '03', '22']
['021', '04', '1']
['025', '01', '13']
['025', '02', '52']
['025', '03', '82']

第一个元素代表ID,第二个元素代表月份,第三个元素代表总额。 如何按月绘制总金额?我希望每个ID都有一行。

我尝试了类似以下内容:

for i in output:
    plt.plot(int(i[1]). int(i[2]))

plt.show()

正在返回空白行。此外,我也不确定如何处理图例。

enter image description here

4 个答案:

答案 0 :(得分:2)

您可以使用pandas。我假设您的列表列表名为l

import pandas as pd

fig, ax = plt.subplots()
arr = np.array(l).astype(np.int)

for id_, g in pd.DataFrame(arr).groupby(0):
    ax.plot(g[1], g[2], label=id_)

ax.legend()

答案 1 :(得分:1)

首先,您需要根据第一列对值进行分组。例如,可以使用this建议来完成此操作。然后,您需要将字符串值转换为浮点数。可以使用map()以及其他可能的方式来完成此操作。 [:, 1:]指定索引,这意味着所有行:然后是第二列和第三列1:

以下是一个有效的答案,假设您的输入存储在名为data的变量中。

编辑:我建议@RafaelC使用astype(float)将数据类型转换为浮点型

import matplotlib.pyplot as plt
import numpy as np
import itertools, operator

# data = [[...], [...], [...]]

for k,g in itertools.groupby(data, operator.itemgetter(0)):
    arr = np.array(list(g))[:, 1:].astype(float)
    x = arr[:, 0]
    y = arr[:, 1]
    plt.plot(x, y, label=k)
plt.legend()  
plt.show()  

enter image description here

答案 2 :(得分:1)

您可以使用pandas数据框标记和绘制数据:

import pandas as pd
l = [['010', '01', '7'],
['010', '02', '6'],
['010', '03', '24'],
['010', '04', '6'],
['015', '02', '8'],
['015', '03', '27'],
['015', '04', '27'],
['020', '01', '130'],
['020', '02', '140'],
['020', '03', '202'],
['020', '04', '3'],
['021', '01', '3'],
['021', '02', '4'],
['021', '03', '22'],
['021', '04', '1'],
['025', '01', '13'],
['025', '02', '52'],
['025', '03', '82']]

df = pd.DataFrame(l, columns=['ID','Month','Amount'])
df['Amount'] = df['Amount'].astype(int)

df.groupby(['Month','ID'])['Amount'].sum().unstack().plot()

输出:

enter image description here

答案 3 :(得分:1)

this pic for plot 尝试使用此代码

import scrapbook as sb

# training
#...........
#............

fig, ax = plt.subplots()
ax.plot(data.index, data['mydata'], c='k', alpha=.5)
sb.glue('figure', fig, 'display')

print("this is my results") # how can I reglue this in orchestrer_notebook ?