Построение элементов из списка - PullRequest
0 голосов
/ 24 апреля 2019

Предположим, у меня есть список списков, например:

['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']

Первый элемент представляет идентификатор, второй элемент - месяц, а третий элемент - общую сумму.Как я могу построить общие суммы по месяцам?Я хотел бы иметь отдельную строку для каждого идентификатора.

Я пробовал что-то похожее на следующее:

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

plt.show()

Возвращает пустую строку.Кроме того, я не уверен, как обращаться с легендами.

enter image description here

Ответы [ 4 ]

2 голосов
/ 24 апреля 2019

Вы можете использовать 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 голос
/ 24 апреля 2019

эта картинка для сюжета попробуйте этот код

@Output
import matplotlib.pyplot as plt
output = [['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']]


listx = []
listy = []
for i in output:
    listx.append((i[1]))
    listy.append((i[2]))
plt.plot(listx,listy,'ro')
@Output(plt.show())
1 голос
/ 24 апреля 2019

Вы можете использовать кадры данных 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

1 голос
/ 24 апреля 2019

Сначала необходимо сгруппировать значения по первому столбцу.Это можно сделать, используя, например, это предложение.Затем вам нужно конвертировать ваши строковые значения в числа с плавающей точкой.Это можно сделать с помощью 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...