webentwicklung-frage-antwort-db.com.de

Ändern Sie die Legende des Pandas-Balkendiagramms

Ich mache mir immer die Mühe, wenn ich ein Balkendiagramm mit Pandas mache und die Namen der Beschriftungen in der Legende ändern möchte. Betrachten Sie zum Beispiel die Ausgabe dieses Codes:

import pandas as pd
from matplotlib.pyplot import *

df = pd.DataFrame({'A':26, 'B':20}, index=['N'])
df.plot(kind='bar')

 enter image description here Wenn ich nun den Namen in der Legende ändern möchte, würde ich normalerweise Folgendes versuchen:

legend(['AAA', 'BBB'])

Aber ich ende damit:

 enter image description here

Tatsächlich scheint die erste gestrichelte Linie einem zusätzlichen Patch zu entsprechen. 

Ich frage mich also, ob es hier einen einfachen Trick gibt, um die Beschriftungen zu ändern, oder muss ich jede der Spalten unabhängig mit matplotlib plotten und die Beschriftungen selbst festlegen. Vielen Dank.

23
Benares

Labels für Pandas df.plot() ändern:

import pandas as pd
from matplotlib.pyplot import *

fig, ax = subplots()
df = pd.DataFrame({'A':26, 'B':20}, index=['N'])
df.plot(kind='bar', ax=ax)
ax.legend(["AAA", "BBB"]);

 enter image description here

Bearbeiten:

Eine Zeile weniger:

df = pd.DataFrame({'A':26, 'B':20}, index=['N'])
ax = df.plot(kind='bar')
ax.legend(["AAA", "BBB"]);

 enter image description here

35

Wenn Sie Plot-Multiplikationszeiten aufrufen müssen, können Sie auch das Argument "label" verwenden:

ax = df1.plot(label='df1')
ax = df2.plot(label='df2')

Während dies in der OP-Frage nicht der Fall ist, kann dies hilfreich sein, wenn die Variable DataFrame im langen Format vorliegt und Sie groupby vor dem Plotten verwenden.

0
Jonathan

Dies ist in gewisser Weise ein Randfall, aber ich denke, er kann den anderen Antworten etwas mehr Wert verleihen. 

Wenn Sie dem Diagramm weitere Details hinzufügen (z. B. eine Anmerkung oder eine Linie), werden Sie schnell feststellen, dass es relevant ist, wenn Sie die Legende auf der Achse aufrufen: Wenn Sie sie am unteren Rand des Skripts aufrufen, werden unterschiedliche Ziehpunkte für das Diagramm erfasst Legendenelemente, die alles durcheinander bringen.

Zum Beispiel das folgende Skript:

df = pd.DataFrame({'A':26, 'B':20}, index=['N'])
ax = df.plot(kind='bar')
ax.hlines(23, -.5,.5, linestyles='dashed')
ax.annotate('average',(-0.4,23.5))

ax.legend(["AAA", "BBB"]); #quickfix: move this at the third line

Werde dir diese Zahl geben, die falsch ist:  enter image description here

Dies ist zwar ein Spielzeugbeispiel, das leicht durch Ändern der Reihenfolge der Befehle behoben werden kann. Manchmal müssen Sie jedoch die Legende nach mehreren - Operationen ändern. Daher bietet Ihnen die nächste Methode mehr Flexibilität. Hier habe ich zum Beispiel auch die Schriftgröße und Position der Legende geändert:

df = pd.DataFrame({'A':26, 'B':20}, index=['N'])
ax = df.plot(kind='bar')
ax.hlines(23, -.5,.5, linestyles='dashed')
ax.annotate('average',(-0.4,23.5))
ax.legend(["AAA", "BBB"]);

# do potentially more stuff here

h,l = ax.get_legend_handles_labels()
ax.legend(h[:2],["AAA", "BBB"], loc=3, fontsize=12)

Das wirst du bekommen:

 enter image description here

0
gibbone