Matplotlib, graphique à barres horizontales (barh) est à l'envers
TL'DR, la barre verticale graphiques sont présentés de manière classique, des choses de la ligne de la gauche vers la droite. Toutefois, lorsqu'il est converti graphique à barres horizontales (à partir de bar
à barh
), tout est à l'envers. I. e., pour un regroupées diagramme à barres, pas seulement de l'ordre de l'regroupés bar est faux, l'ordre de chaque groupe est de mal que de bien.
Pour, par exemple, le graphe de http://dwheelerau.com/2014/05/28/pandas-data-analysis-new-zealanders-and-their-sheep/
Si vous regardez de près, vous constaterez que le bar et la légende sont dans l'ordre inverse -- Boeuf montre en haut dans la légende, mais sur le fond dans le graphique.
Le moyen le plus simple démo, j'ai changé kind='bar',
à kind='barh',
à partir de ce graphique
https://plot.ly/pandas/bar-charts/#pandas-grouped-bar-chart
et le résultat ressemble à ceci:
https://plot.ly/7/~xpt/
I. e., les barres horizontales regroupées diagramme à barres est commandé à l'envers.
Comment résoudre ce problème?
EDIT: @Ajean, il est en fait pas seulement de l'ordre de l'regroupés bar est faux, l'ordre de chaque groupe est de mal que de bien. Le graphique de Personnalisation Simple de matplotlib/pandas graphique à barres (étiquettes, les tiques, etc.) le montre bien:
Nous pouvons voir que la commande est non conventionnelles trop, parce que les gens s'attendent à ce que le graphique soit de haut en bas, "AAA", en haut, pas en bas.
Si vous recherchez "Excel à l'envers", vous trouverez beaucoup de gens se plaignent à ce sujet dans Excel tous sur les lieux. Microsoft Excel a une solution pour elle, ne Matplotlib/Panda/Searborn/Ploty/etc a une solution pour elle?
plt.legend
manuellement, et les commander si vous voulez.Nan, le problème n'est pas la légende, prendre un coup d'oeil à de la parcelle.ly/7/~xpt, A, B, C, D est dans le bon ordre. C'est le bar qui sont dans le mauvais ordre.
Hmmm .... Je suis ne pense pas que c'est un bug en soi, autant qu'une convention de problème. Les barres sont généralement énumérés dans l'ordre croissant (c'est à dire le premier élément est "0", le deuxième élément est "1", etc.). Et dans le cas sur l'affichage ici c'est le "bottom-up" ("up" signifie "supérieur"), il est logique que la première des bars se trouvent au bas de chaque groupe. Le problème est, je pense, que le convention pour une légende est "top-down" plutôt que de "bottom-up". Si vous voulez vraiment inverse, probablement, la modification de la légende de la convention serait plus facile.
OriginalL'auteur xpt | 2015-12-03
Vous devez vous connecter pour publier un commentaire.
Je crois que le conjoint mauvais ordre des groupes et sous-groupes se résume à une seule fonction: la
y
axe augmente vers le haut, comme dans une habitude de la parcelle. Essayez d'inverser ley
axe de vos axes comme dans ce pandas-moins exemple:mais c'est un peu le point, n'est-ce pas? Si dans un
bar
parcelle 1994->2012 va de gauche à droite, puis pour unebarh
on pourrait vouloir le même ordre de bas en haut. OP modifier disant "it is actually not only the order of the grouped bar is wrong, the order of the each group is wrong as well
" m'a suggéré que c'est une solution valable. Si il vient et me dit qu'il ne l'est pas, je vais supprimer la réponse.Oui, Andras, c'est exactement ce que je voulais. Pourriez-vous jeter dans une pandas solution s'il vous plaît? Ceci est aussi loin que je peux aller moi-même. Vous démarrez à partir de là, si vous voulez. Merci.
1. votre gist ne se charge pas pour moi pour une raison quelconque. 2. Je n'ai pas de pandas installé, d'où mon pandas sans réponse. 3. Je pense que vous devriez être en mesure d'utiliser la même solution:
plt.gca()
est un des axes, etdf.plot
est censé renvoyer un des axes de trop. Donc, vous devriez être en mesure de faire quelque chose le long des lignes deax=df.plot(...); ax.invert_yaxis()
. Pouvez-vous confirmer?YEP! Merci beaucoup! Démo ici: gist.github.com/suntong/6572c4d339bdb98388a9
OriginalL'auteur Andras Deak
Je crois que le plus simple solution de ce problème consiste à inverser les pandas dataframe avant de traçage. Par exemple:
À mon avis c'est un bug dans les pandas barh fonction. Au moins les utilisateurs devraient être en mesure de passer un argument comme reverse_order = True etc.
OriginalL'auteur Philipp Schwarz
Je vais considérer cela comme un bug, c'est à dire, la position y de la des bars ne sont pas définies correctement. Le patch est toutefois relativement simple:
Ce n'est qu'un ordre de bars, et qui s'appelle..., le bon ordre. Tout ce qui n'est pas le bon ordre, est donc un buggy commande. :p
OriginalL'auteur CT Zhu
Général correctif est simple:
OriginalL'auteur alexsalo