Disons que j'ai des données au format suivant:
Region Men Women
City1 10 5
City2 50 89
Lorsque je le charge dans Dataframe et dans le graphe, il affiche l'index sous forme d'étiquettes d'axe X au lieu de Region
nom Comment puis-je obtenir des noms sur l'axe X?
Jusqu'ici j'ai essayé:
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()
Actuellement, il affiche x ticks comme 0,1,2..
Puisque vous utilisez des pandas, il semble que vous puissiez transmettre les étiquettes de ticks directement à la méthode plot()
du DataFrame. (docs) . (par exemple, df.plot(..., xticks=<your labels>)
)
De plus, comme les pandas utilisent matplotlib, vous pouvez contrôler les étiquettes de cette façon.
Par exemple, avec plt.xticks()
(exemple) ou ax.set_xticklabels()
En ce qui concerne la rotation, les deux dernières méthodes vous permettent de transmettre un argument de rotation avec les étiquettes. Donc, quelque chose comme:
ax.set_xticklabels(<your labels>, rotation=0)
devrait les forcer à s'étendre horizontalement.
plot.bar () méthode hérite ses arguments de plot () , qui a l'argument rot
:
des docs:
rot: int, par défaut None
Rotation pour les ticks (xticks pour vertical, Yticks pour les tracés horizontaux)
il utilise également par défaut l'index comme ticks pour l'axe des x:
use_index: boolean, True par défaut
Utiliser l'index comme ticks pour l'axe des x
In [34]: df.plot.bar(x='Region', rot=0, title='Population', figsize=(15,10), fontsize=12)
Out[34]: <matplotlib.axes._subplots.AxesSubplot at 0xd09ff28>
vous pouvez également définir explicitement l'index - cela peut être utile pour les index multi-niveaux (axes):
df.set_index('Region').plot.bar(rot=0, title='Population', figsize=(15,10), fontsize=12)
J'ai eu beaucoup de difficulté à trouver une réponse qui me plaisait vraiment pour cela, la fonction ci-dessous y parvient très bien et est très adaptable,
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)
Vous trouverez ci-dessous un exemple de résultat, bien que je définisse une nouvelle couleur pour chaque valeur dans une colonne distincte du cadre de données.