Ich habe ein vorhandenes Grundstück, das mit Pandas wie diesem erstellt wurde:
df['myvar'].plot(kind='bar')
Die y-Achse ist als float formatiert und ich möchte die y-Achse in Prozent ändern. Alle Lösungen, die ich gefunden habe, verwenden die ax.xyz-Syntax und ich kann nur Code unterhalb der Zeile darüber platzieren, die das Diagramm erstellt (ich kann ax = ax nicht zur obigen Zeile hinzufügen.)
Wie kann ich die y-Achse als Prozentsatz formatieren, ohne die obige Zeile zu ändern?
Hier ist die Lösung, die ich gefunden habe , die ich jedoch neu definieren muss :
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.ticker as mtick
data = [8,12,15,17,18,18.5]
perc = np.linspace(0,100,len(data))
fig = plt.figure(1, (7,4))
ax = fig.add_subplot(1,1,1)
ax.plot(perc, data)
fmt = '%.0f%%' # Format you want the ticks, e.g. '40%'
xticks = mtick.FormatStrFormatter(fmt)
ax.xaxis.set_major_formatter(xticks)
plt.show()
Link zur obigen Lösung: Pyplot: Verwenden des Prozentsatzes auf der x-Achse
python
pandas
matplotlib
plot
Chris
quelle
quelle
Antworten:
Dies ist ein paar Monate zu spät, aber ich habe PR # 6251 mit matplotlib erstellt, um eine neue
PercentFormatter
Klasse hinzuzufügen . Mit dieser Klasse benötigen Sie nur eine Zeile, um Ihre Achse neu zu formatieren (zwei, wenn Sie den Import von zählenmatplotlib.ticker
):PercentFormatter()
drei Argumente akzeptiert,xmax
,decimals
,symbol
.xmax
Mit dieser Option können Sie den Wert einstellen, der 100% auf der Achse entspricht. Dies ist hilfreich, wenn Sie Daten von 0,0 bis 1,0 haben und diese von 0% bis 100% anzeigen möchten. Tu es einfachPercentFormatter(1.0)
.Mit den beiden anderen Parametern können Sie die Anzahl der Stellen nach dem Dezimalpunkt und dem Symbol festlegen. Sie standardmäßig auf
None
und'%'
sind.decimals=None
Legt automatisch die Anzahl der Dezimalstellen fest, basierend auf der Anzahl der angezeigten Achsen.Aktualisieren
PercentFormatter
wurde in Matplotlib in Version 2.1.0 eingeführt.quelle
from matplotlib.ticker import mtick
und nahm an, dass dasmtick
"Modul" entfernt wurde.pandas dataframe plot gibt das
ax
für Sie zurück, und dann können Sie beginnen, die Achsen zu manipulieren, was Sie wollen.quelle
matplotlib.ticker
Funktionsformatierer zu verwenden !Jianxuns Lösung hat die Arbeit für mich erledigt, aber die y-Wert-Anzeige unten links im Fenster gebrochen.
Ich habe
FuncFormatter
stattdessen verwendet (und auch die unnötigen nachgestellten Nullen entfernt, wie hier vorgeschlagen ):Generell würde ich die Verwendung
FuncFormatter
für die Etikettenformatierung empfehlen : Sie ist zuverlässig und vielseitig.quelle
ax.yaxis.set_major_formatter(FuncFormatter('{0:.0%}'.format))
. AKA keine Notwendigkeit für das Lambda, lassen Sie Format die Arbeit machen.'{0:.0%}'.format
erstellt eine Formatierungsfunktion . Das0
Vorher-Doppelpunkt weist den Formatierer an, die geschweiften Klammern und ihren Inhalt durch das erste an die Funktion übergebene Argument zu ersetzen. Der Teil nach dem Doppelpunkt.0%
teilt dem Formatierer mit, wie der Wert gerendert werden soll. Das.0
gibt 0 Dezimalstellen und%
das Rendern in Prozent an.Für diejenigen, die den schnellen Einzeiler suchen:
Wenn Sie Latex als Achsentextformatierer verwenden, müssen Sie einen Backslash '\' hinzufügen.
quelle
Ich schlage eine alternative Methode vor
seaborn
Arbeitscode:
quelle
Ich bin zu spät zum Spiel, aber mir ist nur klar, dass dies
ax
durchplt.gca()
diejenigen ersetzt werden kann, die keine Achsen und nur Nebenhandlungen verwenden.Echo @ Mad Physicist Antwort, mit dem Paket
PercentFormatter
wäre es:quelle