J'ai un python qui ressemble à ceci:
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}
Les clés sont de type int, les valeurs sont de type float64. Malheureusement, lorsque j'essaye de tracer cela avec des lignes, matplotlib connecte les mauvais points (tracé joint). Comment puis-je le faire connecter les lignes dans l'ordre des valeurs clés?
Les dictionnaires Python ne sont pas ordonnés. Si vous voulez un dictionnaire commandé, utilisez collections.OrderedDict
Dans votre cas, trier le dict par clé avant de tracer,
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()
Passez simplement les éléments triés du dictionnaire à la fonction plot()
. concentration.items()
renvoie une liste de tuples où chaque tuple contient une clé du dictionnaire et la valeur correspondante.
Vous pouvez profiter de la décompression de la liste (avec *
) Pour transmettre les données triées directement à Zip, puis à nouveau pour les transmettre à 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()
trie les tuples dans l'ordre des éléments du Tuple, vous n'avez donc pas besoin de spécifier une fonction key
car les tuples renvoyés par dict.item()
commencent déjà par la valeur de clé. .