Een python-dictaat plotten in volgorde van sleutelwaarden

Ik heb een python-woordenboek dat er als volgt uitziet:

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}

Ze zijn van het type int, de waarden zijn van het type float64.
Helaas, wanneer ik dit met lijnen probeer te plotten, verbindt matplotlib de verkeerde punten (plot bijgevoegd). Hoe kan ik ervoor zorgen dat het lijnen verbindt in volgorde van de belangrijkste waarden? voer hier de afbeeldingsbeschrijving in


Antwoord 1, autoriteit 100%

Python-woordenboeken zijn ongeordend. Als je een geordend woordenboek wilt, gebruik dan collections.OrderedDict

In jouw geval, sorteer het dictaat op toets voordat je gaat plotten,

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

Hier is het resultaat.
voer hier de afbeeldingsbeschrijving in


Antwoord 2, autoriteit 11%

Geef gewoon de gesorteerde items uit het woordenboek door aan de functie plot(). concentration.items()retourneert een lijst met tupels waarbij elke tupel een sleutel uit het woordenboek en de bijbehorende waarde bevat.

U kunt profiteren van het uitpakken van lijsten (met *) om de gesorteerde gegevens rechtstreeks naar zip door te geven, en vervolgens opnieuw om het door te geven aan 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()sorteert tuples in de volgorde van de items van de tupel, zodat u geen functie keyhoeft op te geven, omdat de tupels worden geretourneerd door dict.item()begint al met de sleutelwaarde.

Other episodes