按键值的顺序绘制python dict

DJn*_*ame 29 python matplotlib

我有一个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}
Run Code Online (Sandbox Code Playgroud)

它们的键是int类型,值是float64类型.不幸的是,当我尝试用线条绘制它时,matplotlib连接错误的点(附图).如何按键值顺序连接线?在此输入图像描述

Spa*_*ine 68

Python词典是无序的.如果需要有序字典,请使用collections.OrderedDict

在您的情况下,在绘图之前按键对字典进行排序,

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()
Run Code Online (Sandbox Code Playgroud)

这是结果. 在此输入图像描述

  • 知道*解包元组非常有用. (4认同)
  • 如果你想按值排序,请使用``lists =排序(d.items(),key = lambda kv:kv [1],reverse = True)```` (4认同)

mha*_*wke 5

只需将排序后的项目从字典传递给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()
Run Code Online (Sandbox Code Playgroud)

sorted()按元组项的顺序对元组进行排序,因此您无需指定key函数,因为返回的元组dict.item()已经以键值开头。