Matplotlib, horizontal-bar-chart (barh) ist, der upside-down
TL'DR, die vertikale Balkendiagramme angezeigt, die in einem konventionellen Weg-Sachen line-up von Links nach rechts. Allerdings, wenn es konvertiert wird, die horizontal-bar-chart (aus bar
zu barh
), alles auf dem Kopf steht. I. e., für ein gruppiertes Balkendiagramm, nicht nur die Reihenfolge der gruppierten bar ist falsch, die Reihenfolge der einzelnen Gruppen ist auch schief.
Z.B., dass der graph von http://dwheelerau.com/2014/05/28/pandas-data-analysis-new-zealanders-and-their-sheep/
Wenn Sie genau hinsehen, werden Sie feststellen, dass die bar und die Legende in umgekehrter Reihenfolge -- Rindfleisch zeigt auf der Oberseite in der Legende, aber unten in der Grafik.
Als die einfachste demo, die ich geändert habe kind='bar',
zu kind='barh',
aus diesem graph
https://plot.ly/pandas/bar-charts/#pandas-grouped-bar-chart
und das Ergebnis sieht wie folgt aus:
https://plot.ly/7/~xpt/
I. e., die Balken der horizontal gruppierte Balkendiagramm ist bestellt, upside-down.
Wie es zu lösen ist?
EDIT: @Ajean, es ist eigentlich nicht nur die Reihenfolge der gruppierten bar ist falsch, die Reihenfolge der einzelnen Gruppen ist auch schief. Der graph von Einfache Anpassung von matplotlib/pandas Balkendiagramm (labels, ticks, etc.) zeigt es deutlich:
Können wir sehen, dass die Reihenfolge ist unkonventionell auch, denn die Leute würden erwarten, dass die Graphen von oben nach unten mit "AAA" an der Spitze, nicht unten.
Wenn Sie die Suche nach "Excel-upside-down -", Sie finden die Leute beschweren sich über diese in Excel alle über dem Orte. Microsoft Excel hat eine Lösung für Sie, tun Matplotlib/Panda/Searborn/Ploty/etc hat ein Update für Sie?
- Sie könnte passieren die bar Griffe in
plt.legend
manuell, und ordnen Sie diese wie Sie wollen. - Nee, das problem ist nicht die Legende, werfen Sie einen Blick auf Grundstück.ly/7/~xpt, A, B, C, D ist in der richtigen Reihenfolge. Es ist die bar, die sind in der falschen Reihenfolge.
- Hmmm .... Ich glaube nicht, dass dies ein Fehler per se, als viel als ein übereinkommen Problem. Die bars sind in der Regel aufgeführt, die in aufsteigender Reihenfolge (d.h. das erste element "0" ist, das zweite element ist "1", usw.). Und in dem Fall hier, dass "bottom-up" ("oben" heißt "höher"), macht es Sinn, dass die ersten Takte werden am Ende jeder Gruppe. Das Problem ist, denke ich, dass das übereinkommen für eine Legende ist "top-down" statt "bottom-up". Wenn Sie wirklich wollen, um es rückgängig zu machen, wahrscheinlich das ändern der Legende convention wäre das einfachste.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, die gemeinsame falsche Reihenfolge der Gruppen und Untergruppen reduziert sich auf eine einzige Funktion: die
y
Achse steigt nach oben, wie in einem üblichen plot. Versuchen Sie, die Umkehrung dery
Achse der Achsen wie in diesem pandas-weniger Beispiel:bar
plot 1994->2012 geht von Links nach rechts, dann einebarh
könnte man die gleiche Reihenfolge von oben nach unten. OP ' s Bearbeiten, zu sagen "it is actually not only the order of the grouped bar is wrong, the order of the each group is wrong as well
" mir vorgeschlagen, dass dies ist eine gültige Lösung. Wenn er kommt und sagt mir, dass es nicht so ist, werde ich löschen die Antwort.plt.gca()
ist eine Achsen, unddf.plot
soll, um eine der Achsen zu. So sollten Sie in der Lage sein zu tun, etwas entlang der Linien vonax=df.plot(...); ax.invert_yaxis()
. Kannst du das bestätigen?invert_yaxis
für Plotly? Ich habe eine harte Zeit, so dass es funktioniert...help
. Es scheint mir, dass, nachdem Sie einen Griff, um eine Abbildung mitpy.get_figure(...)
können Sie etwas tun, wiefig['layout']['yaxis'].update(mirror=True)
. Ich weiß nicht, etwas überplotly
noch ipython notebook, so kann ich nur erahnen. Sie sollten Zugang zu denhelp
, auf der anderen Seite.Ich glaube die einfachste Lösung für dieses problem ist eine Umkehrung der pandas dataframe vor dem zeichnen. Zum Beispiel:
Meiner Meinung nach ist das ein Fehler in der pandas-barh-Funktion. Zumindest sollten die Benutzer in der Lage sein, um pass ein argument wie reverse_order = True usw.
Ich halte das für einen Fehler, d.h., die y-position des Balken sind nicht richtig zugeordnet. Der patch ist jedoch relativ einfach:
Dies ist nur eine richtige Reihenfolge der bars, und das heißt..., der richtigen Reihenfolge. Alles, was nicht die richtige Reihenfolge, ist so ein buggy um. :p
Allgemeine Lösung ist einfach: