webentwicklung-frage-antwort-db.com.de

Python Pandas: Festlegen des Dataframe-Spaltenwerts als X-Achsenbeschriftung

Angenommen, ich habe Daten in folgendem Format:

Region   Men   Women
City1    10   5
City2    50   89

Wenn ich es in Dataframe und Diagramme lade, wird der Index als Beschriftung der X-Achse anstelle von Region name angezeigt. Wie bekomme ich Namen auf der X-Achse?

Bisher habe ich versucht:

import pandas as pd
import matplotlib.pyplot as plt    
plt.style.use('ggplot')
ax = df[['Men','Women']].plot(kind='bar', title ="Population",figsize=(15,10),legend=True, fontsize=12)
ax.set_xlabel("Areas",fontsize=12)
ax.set_ylabel("Population",fontsize=12)
plt.show()

Derzeit zeigt es x Ticks als 0,1,2..

15
Volatil3

Da Sie Pandas verwenden, scheint es, als könnten Sie die Markierungen direkt an die plot()-Methode von DataFrame übergeben. (docs) . (z. B. df.plot(..., xticks=<your labels>))

Da Pandas Matplotlib verwenden, können Sie die Beschriftungen auf diese Weise steuern.

Zum Beispiel mit plt.xticks()(Beispiel) oder ax.set_xticklabels()

In Bezug auf die Rotation können Sie mit den letzten beiden Methoden ein Rotationsargument zusammen mit den Beschriftungen übergeben. So etwas wie:

ax.set_xticklabels(<your labels>, rotation=0)

sollte sie zwingen, horizontal zu liegen.

9
jedwards

plot.bar () method erbt seine Argumente von plot () , das rot-Argument hat:

aus den docs:

rot: int, Standardwert Keine

Drehung für Ticks (Xticks für vertikale, Yticks für horizontale Diagramme)

es verwendet auch einen Standardindex als Ticks für die X-Achse:

use_index: boolean, Standardeinstellung True

Verwenden Sie den Index als Häkchen für die X-Achse

In [34]: df.plot.bar(x='Region', rot=0, title='Population', figsize=(15,10), fontsize=12)
Out[34]: <matplotlib.axes._subplots.AxesSubplot at 0xd09ff28>

alternativ können Sie den Index auch explizit setzen. Dies kann für mehrstufige Indizes (Achsen) nützlich sein:

df.set_index('Region').plot.bar(rot=0, title='Population', figsize=(15,10), fontsize=12)

 enter image description here

6
MaxU

Ich hatte Mühe, eine Antwort zu finden, die mir wirklich gut gefallen hat, die unten stehende Funktion erfüllt sie recht gut und ist sehr anpassungsfähig.

def plot_vals_above_titles(data_frame, columns):
    import random
    y_vals = {}

    fig = plt.figure()
    plt.grid(True)

    for index, row in data_frame.iterrows():
        x_coord = 0

        for col in columns:
            # add some jitter to move points off vertical line
            jitter = random.uniform(-0.1,.1)
            x_coord += jitter

            plt.scatter(
                x = x_coord,
                y = row[col]
                )

            x_coord -= jitter
            x_coord+=1

    # rename the xticks with column names
    x_vals = range(0, len(columns))
    plt.xticks(x_vals, columns)

Im Folgenden finden Sie ein Beispiel für mein Ergebnis, obwohl ich für jeden Wert in einer separaten Spalte im Datenrahmen eine neue Farbe festgelegt habe

Meine Spalten wurden mit ["A", "B", "C", "D", "E"] bezeichnet.

0
nbenz