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