Fügen Sie einem Pandas-Plot x- und y-Beschriftungen hinzu

195

Angenommen, ich habe den folgenden Code, der mit Pandas etwas sehr Einfaches darstellt:

import pandas as pd
values = [[1, 2], [2, 5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                   index=['Index 1', 'Index 2'])
df2.plot(lw=2, colormap='jet', marker='.', markersize=10, 
         title='Video streaming dropout by category')

Ausgabe

Wie kann ich x- und y-Beschriftungen einfach festlegen und gleichzeitig bestimmte Farbkarten verwenden? Mir ist aufgefallen, dass der plot()Wrapper für Pandas DataFrames keine spezifischen Parameter dafür akzeptiert.

Everaldo Aguiar
quelle

Antworten:

327

Die df.plot()Funktion gibt ein matplotlib.axes.AxesSubplotObjekt zurück. Sie können die Beschriftungen für dieses Objekt festlegen.

ax = df2.plot(lw=2, colormap='jet', marker='.', markersize=10, title='Video streaming dropout by category')
ax.set_xlabel("x label")
ax.set_ylabel("y label")

Geben Sie hier die Bildbeschreibung ein

Oder prägnanter : ax.set(xlabel="x label", ylabel="y label").

Alternativ wird die Beschriftung der x-Achse des Index automatisch auf den Indexnamen gesetzt, falls vorhanden. so df2.index.name = 'x label'würde auch funktionieren.

TomAugspurger
quelle
71
Gibt es einen bestimmten Grund, warum x- und y-Beschriftungen nicht als Argumente hinzugefügt werden können pd.plot()? Angesichts der zusätzlichen Prägnanz von pd.plot()over plt.plot()scheint es sinnvoll, es noch prägnanter zu gestalten, anstatt anrufen zu müssen ax.set_ylabel().
Chrispy
Wenn ich das getan habe ax.set_ylabel("y label"), wird ein Fehler zurückgegeben 'list' object is not callable. Irgendeine Idee?
Hauptbuch Yu
Interessant. Ich weiß nicht, ob es versionabhängig ist, aber ich muss es tun ax.axes.set_ylabel("y label").
Hauptbuch Yu
2
Ich denke, Sie könnten das ax.set(xlabel='...)Höhere in diese Antwort einfügen, da es möglicherweise hinter dem Diagramm übersehen wird. Es ist wirklich der prägnanteste Ansatz, beide Achsen einzustellen, was der übliche Anwendungsfall ist.
Poulter7
Wie stellen Sie den Standort ein?
Odisseo
43

Sie können es folgendermaßen verwenden:

import matplotlib.pyplot as plt 
import pandas as pd

plt.figure()
values = [[1, 2], [2, 5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                   index=['Index 1', 'Index 2'])
df2.plot(lw=2, colormap='jet', marker='.', markersize=10,
         title='Video streaming dropout by category')
plt.xlabel('xlabel')
plt.ylabel('ylabel')
plt.show()

Natürlich müssen Sie die Zeichenfolgen 'xlabel' und 'ylabel' durch das ersetzen, was Sie möchten.

jesukumar
quelle
Beachten Sie auch, dass Sie plt.xlabel()usw. nach df.plot()und nicht vorher anrufen müssen , da Sie sonst zwei Diagramme erhalten - die Aufrufe ändern ein "vorheriges" Diagramm. Gleiches gilt für plt.title().
Tomasz Gandor
30

Wenn Sie die Spalten und den Index Ihres DataFrame beschriften, liefern Pandas automatisch die entsprechenden Beschriftungen:

import pandas as pd
values = [[1, 2], [2, 5]]
df = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                  index=['Index 1', 'Index 2'])
df.columns.name = 'Type'
df.index.name = 'Index'
df.plot(lw=2, colormap='jet', marker='.', markersize=10, 
        title='Video streaming dropout by category')

Geben Sie hier die Bildbeschreibung ein

In diesem Fall müssen Sie y-Labels weiterhin manuell eingeben (z. B. über, plt.ylabelwie in den anderen Antworten gezeigt).

Shoyer
quelle
Derzeit funktioniert diese 'automatische Bereitstellung von DataFrame' nicht. Ich habe es gerade versucht (Pandas Version 0.16.0, Matplotlib 1.4.3) und der Plot wird korrekt generiert, aber ohne Beschriftungen auf den Achsen.
szeitlin
1
@szeitlin Könntest du bitte einen Fehlerbericht auf der Pandas Github Seite einreichen? github.com/pydata/pandas/issues
Shoyer
weißt du was, heute funktioniert zumindest das xlabel. Vielleicht hatte der Datenrahmen, den ich gestern verwendet habe, etwas Seltsames (?). Wenn ich es reproduzieren kann, werde ich es ablegen!
szeitlin
20

Es ist möglich, beide Beschriftungen zusammen mit der axis.setFunktion festzulegen. Suchen Sie nach dem Beispiel:

import pandas as pd
import matplotlib.pyplot as plt
values = [[1,2], [2,5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], index=['Index 1','Index 2'])
ax = df2.plot(lw=2,colormap='jet',marker='.',markersize=10,title='Video streaming dropout by category')
# set labels for both axes
ax.set(xlabel='x axis', ylabel='y axis')
plt.show()

Geben Sie hier die Bildbeschreibung ein

Gelassenheit
quelle
3
Ich mag die .set(xlabel='x axis', ylabel='y axis')Lösung, weil ich damit im Gegensatz zu den Plotmethoden set_xlabel und set_ylabel alles in einer Zeile zusammenfassen kann. Ich frage mich, warum sie alle (übrigens einschließlich der Set-Methode) das Plot-Objekt oder zumindest etwas, das von ihm geerbt wurde, nicht zurückgeben.
Fehlertolerant
14

Für Fälle, in denen Sie verwenden pandas.DataFrame.hist:

plt = df.Column_A.hist(bins=10)

Beachten Sie, dass Sie eine ARRAY von Plots anstelle eines Plots erhalten. Um das x-Label festzulegen, müssen Sie also so etwas tun

plt[0][0].set_xlabel("column A")
Sela
quelle
10

wie wäre es mit ...

import pandas as pd
import matplotlib.pyplot as plt

values = [[1,2], [2,5]]

df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], index=['Index 1','Index 2'])

(df2.plot(lw=2,
          colormap='jet',
          marker='.',
          markersize=10,
          title='Video streaming dropout by category')
    .set(xlabel='x axis',
         ylabel='y axis'))

plt.show()
Dror Hilman
quelle
2

pandaswird matplotlibfür grundlegende Datenrahmen-Plots verwendet. Wenn Sie also pandasfür ein einfaches Diagramm verwenden, können Sie matplotlib für die Anpassung des Diagramms verwenden. Ich schlage hier jedoch eine alternative Methode vor, seaborndie eine stärkere Anpassung des Diagramms ermöglicht, ohne auf die Grundebene von zu gehen matplotlib.

Arbeitscode:

import pandas as pd
import seaborn as sns
values = [[1, 2], [2, 5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                   index=['Index 1', 'Index 2'])
ax= sns.lineplot(data=df2, markers= True)
ax.set(xlabel='xlabel', ylabel='ylabel', title='Video streaming dropout by category') 

Geben Sie hier die Bildbeschreibung ein

Dr. Arslan
quelle