Gibt es eine Möglichkeit, ein Balkendiagramm mithilfe matplotlib
von Daten direkt aus einem Diktat zu zeichnen ?
Mein Diktat sieht so aus:
D = {u'Label1':26, u'Label2': 17, u'Label3':30}
ich habe 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)
zu arbeiten, aber es tut 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
python
matplotlib
plot
otmezger
quelle
quelle
ax.bar(D,range(1,len(D)+1,1),0.5)
ersten Argument sollte in Ihrem Fall eine Liste von Zahlen stehenD.values()
.Antworten:
Sie können dies in zwei Zeilen tun, indem Sie zuerst das Balkendiagramm zeichnen und dann die entsprechenden Häkchen setzen:
Beachten Sie, dass die vorletzte Zeile
plt.xticks(range(len(D)), list(D.keys()))
in Python3 gelesen werden sollte, daD.keys()
ein Generator zurückgegeben wird, den matplotlib nicht direkt verwenden kann.quelle
ax.set_xticklabels
Es ist etwas einfacher als die meisten Antworten hier vermuten lassen:
quelle
Zum späteren Nachschlagen funktioniert der obige Code nicht mit Python 3. Für Python 3 muss der Code
D.keys()
in eine Liste konvertiert werden.quelle
Der beste Weg, dies zu implementieren, indem
matplotlib.pyplot.bar(range, height, tick_label)
der Bereich Skalarwerte für die Positionierung des entsprechenden Balkens im Diagramm bereitstellt.tick_label
macht die gleiche Arbeit wiexticks()
. Man kann es auch durch eine ganze Zahl ersetzen und mehrere verwendenplt.bar(integer, height, tick_label)
. Detaillierte Informationen finden Sie in der Dokumentation .Zusätzlich kann derselbe Plot ohne Verwendung erzeugt werden
range()
. Das Problem war jedoch, dass estick_label
nur beim letztenplt.bar()
Anruf funktioniert hat . Daherxticks()
wurde zur Kennzeichnung verwendet:quelle
Ich lade das Diktat oft in einen Pandas-DataFrame und verwende dann die Plotfunktion des DataFrame.
Hier ist der Einzeiler:
quelle
Warum nicht einfach:
quelle