matplotlib 按照键值的顺序绘制python dict

blpfk2vs  于 2023-10-24  发布在  Python
关注(0)|答案(3)|浏览(142)

我有一个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连接了错误的点(图附在后面)。我怎么才能让它按照键值的顺序连接线呢?

gxwragnw

gxwragnw1#

Python字典是无序的。如果你想要一个有序的字典,使用集合。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()

下面是结果。

hyrbngr7

hyrbngr72#

只需将字典中排序后的项传递给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()返回的元组已经以键值开始。

3qpi33ja

3qpi33ja3#

更简单的方式:

plt.plot(list(dict.keys()), list(dict.values()))

相关问题