【问题标题】:Plotting a python dict in order of key values按键值的顺序绘制 python dict
【发布时间】:2016-09-12 23:25:47
【问题描述】:

我有一个看起来像这样的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 连接了错误的点(附图)。我怎样才能让它按照键值的顺序连接线?

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    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()
    

    这是结果。

    【讨论】:

    • 知道 * 解包元组非常有用。
    • 如果要按值排序,请使用lists = sorted(d.items(), key=lambda kv: kv[1], reverse=True)
    【解决方案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() 返回的元组已经以键值开头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 1970-01-01
      • 2019-02-25
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多