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

У меня есть два списка списков, подобных этим.

list1=[[0,1],[1,2.5],[2,3],[3,5.6]]
list2=[[0,2],[2,5],[3,7]]

Мне нужно иметь гистограмму, которая бы сравнивала оба списка.На оси x должно быть 1-е целое число каждого элемента списка list1 (0,1,2,3 и т. Д.).Столбцы должны располагаться рядом и отображать 2-й номер каждого элемента каждого списка.

Я пробовал следующее, но не могу отделить графики.Столбцы нанесены друг на друга.

plt.bar(*zip(*list1))
plt.bar(*zip(*list2))

Ожидаемый результат - столбцы располагаются рядом.

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

Вы также можете использовать pandas:

dfs = [pd.DataFrame(np.array(lst), 
                    columns=['idx', i]).set_index('idx')
          for i,lst in enumerate([list1,list2])]

df = pd.concat(dfs, axis=1)

df.plot.bar()

enter image description here

2 голосов
/ 09 мая 2019

Вы можете вручную сдвигать полосы и играть с шириной, чтобы они появлялись рядом друг с другом. E.g.:

import numpy as np
import matplotlib.pyplot as plt

list1 = [[0,1],[1,2.5],[2,3],[3,5.6]]
list2 = [[0,2],[2,5],[3,7]]

x1,y1 = zip(*list1)
x2,y2 = zip(*list2)
plt.bar(np.array(x1)-0.15, y1, width = 0.3)
plt.bar(np.array(x2)+0.15, y2, width = 0.3)
#setting the xticks. Note x1 and x2 are tuples, thus + is concatenation
plt.xticks(range(min(x1+x2), max(x1+x2)+1)) 
plt.show()

Результат:
plot_result

(Обратите внимание, что этот код допускает целочисленные значения x, как в примере.)

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