web-dev-qa-db-fra.com

Pandon Python: Comment définir la valeur de la colonne Dataframe en tant qu'étiquettes sur l'axe X

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

15
Volatil3

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.

9
jedwards

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)

 enter image description here

6
MaxU

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.

Mes colonnes étaient intitulées ['A', 'B', 'C', 'D', 'E']

0
nbenz