首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >绘制列表中的元素

绘制列表中的元素
EN

Stack Overflow用户
提问于 2019-04-24 21:40:47
回答 4查看 771关注 0票数 0

假设我有一个列表列表,如下所示:

代码语言:javascript
复制
['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都有一个单独的行。

我尝试了类似下面的方法:

代码语言:javascript
复制
for i in output:
    plt.plot(int(i[1]). int(i[2]))

plt.show()

返回一个空行。此外,我也不确定如何处理图例。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-04-24 21:56:20

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

代码语言:javascript
复制
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()
票数 2
EN

Stack Overflow用户

发布于 2019-04-24 21:49:30

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

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

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

代码语言:javascript
复制
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()  

票数 1
EN

Stack Overflow用户

发布于 2019-04-24 22:05:56

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

代码语言:javascript
复制
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()

输出:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55831482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档