Python список кортежей, как построить все кортежи одним и тем же ключом - PullRequest
0 голосов
/ 06 апреля 2020

В моем коде на каждом шаге итерации я получаю список кортежей, которые содержат worker_id и значение, например:

[('worker-159', 1.1685709120273498), ('worker-156', 0.7916160785059027), ('worker-150', 1.1486401201147178), ('worker-153', 0.6132945731919339)]
[('worker-159', 1.195049722870496), ('worker-156', 1.0330889397508607), ('worker-150', 1.1598074339882078), ('worker-153', 1.0162635831405047)]
[('worker-159', 1.2002260342341922), ('worker-156', 1.044212019411522), ('worker-150', 1.1610147533213582), ('worker-153', 1.0155351093960254)]
[('worker-159', 1.201086564448113), ('worker-156', 1.0452712882782897), ('worker-150', 1.1611455202975516), ('worker-153', 1.0102820381745612)]
[('worker-159', 1.20145397632951), ('worker-156', 1.0455816259596025), ('worker-150', 1.1611884914303927), ('worker-153', 1.0068296997277124)
[('worker-159', 1.2024538250404766), ('worker-156', 1.0461755869603413), ('worker-150', 1.1612801087850406), ('worker-153', 0.9958443656576963)]

Я хочу построить график изменения каждого значения в каждом шаге для каждого работник. Итак, я хочу сделать 4 графика (по одному для каждого работника), где каждый из них имеет по оси X шаг итерации и по оси Y свое соответствующее значение.

Кто-нибудь знает, как это сделать? ? Я попытался использовать метод zip, но он только отображает различные кортежи в списке. ie:

        x, y= zip(*res)
        plt.plot(x, y)
        plt.show()

Дает мне один график для каждого шага со всеми работниками в оси Х и всеми их значениями в оси Y.

Мне нужен один график для каждого работника шаг итерации по оси x и его значение по оси y.

Я полагаю, это вопрос того, как сгруппировать первые кортежи, а затем 2-й кортежи et c на основе их ключа ( который является worker_id). Но я не знаю, как это сделать.

1 Ответ

0 голосов
/ 06 апреля 2020

Вы можете попробовать это так:

steps = [[('worker-159', 1.1685709120273498), ('worker-156', 0.7916160785059027), ('worker-150', 1.1486401201147178), ('worker-153', 0.6132945731919339)],
[('worker-159', 1.195049722870496), ('worker-156', 1.0330889397508607), ('worker-150', 1.1598074339882078), ('worker-153', 1.0162635831405047)],
[('worker-159', 1.2002260342341922), ('worker-156', 1.044212019411522), ('worker-150', 1.1610147533213582), ('worker-153', 1.0155351093960254)],
[('worker-159', 1.201086564448113), ('worker-156', 1.0452712882782897), ('worker-150', 1.1611455202975516), ('worker-153', 1.0102820381745612)],
[('worker-159', 1.20145397632951), ('worker-156', 1.0455816259596025), ('worker-150', 1.1611884914303927), ('worker-153', 1.0068296997277124)],
[('worker-159', 1.2024538250404766), ('worker-156', 1.0461755869603413), ('worker-150', 1.1612801087850406), ('worker-153', 0.9958443656576963)]]

import matplotlib.pyplot as plt
fig, ax = plt.subplots(2,2)
ax = ax.ravel() #all subaxes in single numpy array, to easily iterate over
ls = len(steps)
for j, ax_sub in enumerate(ax):
    ax_sub.plot(range(ls), [k[j][1] for k in steps])

plt.show()

Это только один из способов. Вы также можете нанести их отдельно на свои цифры.

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