Построение нескольких переменных в matplotlib python - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь построить гистограмму, и у меня есть несколько списков для xaxisn (n от 1 до 5) и yaxisn (от 1 до 5). Значения в каждом соответствующем xaxisn первоначально были сопоставлены со значениями в yaxisn в словаре, и они одинаковы от 1 до 5, но в другом порядке. Например,

dict1 = {'a': 80, 'c': 30, 'e': 52, 'b': 12, 'd': 67}
dict2 = {'c': 47, 'a': 73, 'e': 32, 'd': 35, 'b': 40}

Итак, я создал список, содержащий все номинальные значения для x, и попытался построить все вместе с

xaxis = ['a', 'b', 'c', 'd', 'e']
yaxis1 = dict1.values()
xaxis1 = dict1.keys()
yaxis2 = dict2.values()
xaxis2 = dict2.keys()
plt.bar(xaxis1,yaxis1)
plt.bar(xaxis2,yaxis2)
plt.xticks(range(len(xaxis)),xaxis)

, но я заметил, что несмотря на сопоставление, значения y на графике не выровнены по правому краю x. Поэтому вместо того, чтобы показывать в порядке частот для xaxis, они сохраняют тот же порядок, что и в словаре. Я попытался изменить последнюю строку кода на

plt.xticks(range(len(xaxis)),xaxis1)
plt.xticks(range(len(xaxis)),xaxis2)

, но опять же, с несколькими переменными, одна перезаписывает предыдущую. Нужно ли упорядочивать все словари одним и тем же способом для их построения, или есть другой способ сделать это без необходимости повторного кодирования всех моих кодов?

1 Ответ

1 голос
/ 16 января 2020

Вы можете убедиться в том, что порядок для двух осей y одинаков, используя ключи из одного dict для извлечения значений из обеих. Вот один из способов сделать это.

import operator

dict1 = {'a': 80, 'c': 30, 'e': 52, 'b': 12, 'd': 67}
dict2 = {'c': 47, 'a': 73, 'e': 32, 'd': 35, 'b': 40}

xs = dict1.keys()
f = operator.itemgetter(*xs)
y1 = f(dict1)
y2 = f(dict2)

>>> xs
dict_keys(['a', 'c', 'e', 'b', 'd'])
>>> y1
(80, 30, 52, 12, 67)
>>> y2
(73, 47, 32, 40, 35)
>>>

Затем используйте xs для всех графиков.

plt.bar(xs,y1)
plt.bar(xs,y2)
plt.xticks(range(len(xs)),xs)
plt.show()
plt.close()

operator.itemgetter получит get каждый элемент, в котором он создан в том порядке, в котором они были даны. Подобно этим спискам понимания.

>>> [dict1[k] for k in xs]
[80, 30, 52, 12, 67]
>>> [dict2[k] for k in xs]
[73, 47, 32, 40, 35]
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...