假设我有一个列表列表,如下所示:
['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()返回一个空行。此外,我也不确定如何处理图例。

发布于 2019-04-24 21:56:20
您可以使用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()发布于 2019-04-24 21:49:30
首先,您需要根据第一列对值进行分组。例如,这可以使用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()

发布于 2019-04-24 22:05:56
您可以使用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()输出:

https://stackoverflow.com/questions/55831482
复制相似问题