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?
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()
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 key
hoeft op te geven, omdat de tupels worden geretourneerd door dict.item()
begint al met de sleutelwaarde.