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.

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.


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.


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).


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


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")

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()

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.