Plot eine bar mit matplotlib eine Wörterbuch
Gibt es eine Möglichkeit, zeichnen ein bar-plot mit matplotlib
mit Daten direkt aus einem dict?
Mein dict wie folgt aussieht:
D = {u'Label1':26, u'Label2': 17, u'Label3':30}
Ich hatte erwartet,
fig = plt.figure(figsize=(5.5,3),dpi=300)
ax = fig.add_subplot(111)
bar = ax.bar(D,range(1,len(D)+1,1),0.5)
arbeiten, aber es funktioniert nicht.
Hier ist der Fehler:
>>> ax.bar(D,range(1,len(D)+1,1),0.5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/matplotlib/axes.py", line 4904, in bar
self.add_patch(r)
File "/usr/local/lib/python2.7/site-packages/matplotlib/axes.py", line 1570, in add_patch
self._update_patch_limits(p)
File "/usr/local/lib/python2.7/site-packages/matplotlib/axes.py", line 1588, in _update_patch_limits
xys = patch.get_patch_transform().transform(vertices)
File "/usr/local/lib/python2.7/site-packages/matplotlib/patches.py", line 580, in get_patch_transform
self._update_patch_transform()
File "/usr/local/lib/python2.7/site-packages/matplotlib/patches.py", line 576, in _update_patch_transform
bbox = transforms.Bbox.from_bounds(x, y, width, height)
File "/usr/local/lib/python2.7/site-packages/matplotlib/transforms.py", line 786, in from_bounds
return Bbox.from_extents(x0, y0, x0 + width, y0 + height)
TypeError: coercing to Unicode: need string or buffer, float found
- Kannst du uns erzählen, was genau nicht funktioniert? Bekommen Sie eine Ausnahme? Was Ausnahme? Teilen Sie so viele Informationen wie möglich.
- sorry, ich habe aktualisiert die Frage mit der Fehlermeldung zeigt es... etwas über string oder buffer... ich verstehe nicht diese Fehlermeldung.
- Es ist nicht klar, was Sie erreichen wollen, aber in
ax.bar(D,range(1,len(D)+1,1),0.5)
ersten argument eine Liste von zahlen, in Ihrem FallD.values()
. - Ich weiß, es kann nicht funktionieren... aber was ich versuchte zu tun ist, um nur plot bar chart mit einer Linie, so dass Sie die Zeichenfolgen und Werte auf einmal. Ich hart, vielleicht gibt es eine Möglichkeit zum hinzufügen von Daten und Beschriftungen in der gleichen Zeit... aber
D.values()
war auch neu für mich und es ist ziemlich cool. - Ein one-liner ist nicht möglich, zumindest meines Wissens.
- Möchten Sie vielleicht zum senden eines feature-request auf der github-Website, weil es nicht nützlich erscheinen.
- Nützlich oder nicht, es scheint "natürlich" 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du kannst es in zwei Linien, indem Sie zuerst zeichnen Sie das Balkendiagramm festlegen und dann die entsprechenden ticks:
Beachten Sie, dass die vorletzte Zeile sollte lauten
plt.xticks(range(len(D)), list(D.keys()))
in Python ist3, weilD.keys()
gibt einen generator, der matplotlib nicht direkt verwenden.ax.set_xticklabels
list(D.keys())
. Siehe stackoverflow.com/questions/31755900/... für weitere details.keys
als arg jetzt so zu reduzieren auf eine Zeile und zu vereinfachen, wie:plt.bar(D.keys(), D.values(), align='center')
Für die Zukunft, der obige code funktioniert nicht mit Python 3. Für Python 3, die
D.keys()
konvertiert werden muss, auf eine Liste.Ist es ein wenig einfacher, als die meisten Antworten hier empfehlen:
Der beste Weg, es zu implementieren, mit
matplotlib.pyplot.bar(range, height, tick_label)
wo die Reihe stellt Skalare Werte für die Positionierung der entsprechende Balken in der Grafik.tick_label
macht die gleiche Arbeit wiexticks()
. Man kann ersetzen Sie es mit einem integer und auch mehrereplt.bar(integer, height, tick_label)
. Für detaillierte Informationen entnehmen Sie bitte der Dokumentation.Zusätzlich die gleichen plot erzeugt werden kann, ohne mit
range()
. Aber das problem war, dasstick_label
arbeitete nur für die letztenplt.bar()
nennen. Daherxticks()
wurde für die Etikettierung verwendet:Ich oft laden die dict in ein pandas DataFrame verwenden Sie dann die plot-Funktion des DataFrame.
Hier ist die one-liner:
Warum nicht einfach: