Построение питона python в порядке значений ключей
У меня есть словарь python, который выглядит так:
In[1]: dict_concentration
Out[2] : {0: 0.19849878712984576,
5000: 0.093917341754771386,
10000: 0.075060643507712022,
20000: 0.06673074282575861,
30000: 0.057119318961966224,
50000: 0.046134834546203485,
100000: 0.032495766396631424,
200000: 0.018536317451599615,
500000: 0.0059499290585381479}
Они имеют тип int, значения - тип float64.
К сожалению, когда я пытаюсь построить это с помощью строк, matplotlib связывает неправильные точки (сюжет прилагается). Как я могу подключить строки по порядку значений клавиш? ![введите описание изображения здесь]()
Ответы
Ответ 1
Словари Python неупорядочены. Если вы хотите упорядоченный словарь, используйте collections.OrderedDict
В вашем случае сортируйте dict по ключу перед построением графика,
import matplotlib.pylab as plt
lists = sorted(d.items()) # sorted by key, return a list of tuples
x, y = zip(*lists) # unpack a list of pairs into two tuples
plt.plot(x, y)
plt.show()
Вот результат.
![введите описание изображения здесь]()
Ответ 2
Просто передайте отсортированные элементы из словаря в функцию plot()
. concentration.items()
возвращает список кортежей, где каждый кортеж содержит ключ из словаря и его соответствующее значение.
Вы можете воспользоваться распаковкой списка (с помощью *
), чтобы передать отсортированные данные непосредственно в zip, а затем снова передать его в plot()
:
import matplotlib.pyplot as plt
concentration = {
0: 0.19849878712984576,
5000: 0.093917341754771386,
10000: 0.075060643507712022,
20000: 0.06673074282575861,
30000: 0.057119318961966224,
50000: 0.046134834546203485,
100000: 0.032495766396631424,
200000: 0.018536317451599615,
500000: 0.0059499290585381479}
plt.plot(*zip(*sorted(concentration.items())))
plt.show()
sorted()
сортирует кортежи в порядке элементов набора, поэтому вам не нужно указывать функцию key
, потому что кортежи, возвращаемые dict.item()
, уже начинаются с значения ключа.