2
votes

boîtes à moustaches multiples basées sur la colonne du mois

J'ai besoin de 12 graphiques ( fig, axes = plt.subplots (4,3) ) et dans chacun, j'ai besoin d'un graphique à barres où l'axe des x est Compagnie aérienne et l'axe des y est leur nombre tracé pour chaque mois.

ie Pour le mois 1 -> x-axis = 'Airline' et y-axis = 'count' et appréciez également si chaque barre est de couleur différente.

De même, j'ai besoin de telles parcelles pour chaque mois (12 parcelles).

df.groupby(df.index)['Airline'].plot(kind='bar')

J'ai essayé quelque chose comme,

                     Airline    counts
Month       
1                  Jet Airways   430
1                  Air France    197
1                  Emirates      184
2                  Jet Airways   674
2                  Air France    513
2                  Emirates      369
3                  Jet Airways   153
3                  Air France     76
4                  Emirates       63
....               .....         ....

le graphique ci-dessous ne contient que pour 7 mois.

entrez la description de l'image ici

Mais cela ne renvoie qu'un seul tracé avec tous valeurs qui y sont intégrées, ce qui n'est pas ma sortie attendue.


4 commentaires

Je ne sais pas quelle sortie vous recherchez, mais ce serait peut-être similaire à mon message sur stackoverflow.com/questions/54717883/... ? Dans cet article, j'inclus également plusieurs autres liens vers des exemples pour tracer plusieurs barres


@Reedinationer J'ai mis à jour la question avec plus d'informations. Je n'ai pas d'exemple de sortie à afficher car je n'ai pas obtenu la sortie souhaitée, alors je l'ai expliqué.


Serait-il possible pour vous de publier les données que vous utilisez?


@Reedinationer Oui. Appréciez également si chaque barre est de couleur différente plutôt que de couleur unique. Je suis désolé de ne pas être autorisé à partager les données. Vous pouvez simplement essayer avec quelques exemples de points ci-dessus.


3 Réponses :


0
votes

Voici ce que vous recherchez:

# import matplotlib and seaborn for data visualization.
import matplotlib.pyplot as plt
import seaborn as sns

# Load dataframe.
df = pd.DataFrame(...)

# Plot one bar for each airline, grouped by month.
sns.barplot(x="month", y="counts", hue="Airline", data=df)
plt.show()

Vous vous retrouverez avec quelque chose comme ceci: entrez la description de l'image ici

Découvrez la page barplot de seaborn .


0 commentaires

1
votes

Je n'ai pas reçu votre jeu de données d'origine, mais voici comment vous pouvez tracer vos données :)

import matplotlib.pyplot as plt

# Make my own data set here
data1 = {
    'Southwest': 30,
    'American': 12
}
data2 = {
    'Southwest': 26,
    'American': 35
}

def plot_my_data(ax, dataset):
    names = list(dataset.keys())
    numbers = list(dataset.values())
    for index in range(len(names)):
        if names[index] == 'Southwest':
            ax.bar(names[index], numbers[index], label='Southwest', color='k')
        else:
            ax.bar(names[index], numbers[index])

fig, axs = plt.subplots(4, 3) #define our subplots

plot_my_data(axs[0, 0], data1) #for each subplot we give it data and an axs. The axs is defined as [row, column]
plot_my_data(axs[0, 1], data2)

plt.show() # show the result

Ce script s'exécutera si vous le copiez / collez. Ensuite, il vous suffit de lui alimenter vos ensembles de données. Vous pouvez spécifier des couleurs en fonction des noms comme je l'ai montré, et également les étiqueter comme telles (c'est pourquoi une fonction pour faire cela est géniale afin que vous n'ayez pas à copier / coller 12 fois).

p >


0 commentaires

1
votes

Je travaillais sur mon propre ensemble de données généré, donc ça ne pouvait pas être parfait. Cependant, cela devrait également fonctionner sur vos données.

Je travaillais sur des données générées par quelque chose comme ceci:

grouped = df.groupby('month')
fig = plt.figure(figsize=(18,15))
i=0
import random as rand
#create random rgb colors assigned to airline 
colors = {k: (rand.random(),rand.random(),rand.random()) for k in airline_names}
for month, values in grouped:
    i += 1
    ax = fig.add_subplot(4,3,i)
    colors_list = [colors[airline] for airline in values["Airline"]]
    values.plot.bar("Airline", "counts",ax=ax,color=colors_list,xticks=[],title=month)
    #As a xlabel I printed only 7 chars, otherwise it would be mess
    ax.set_xticklabels(values["Airline"].str[0:7])
plt.show()

J'ai supposé que pendant un mois, il y avait une compagnie aérienne, donc je n'ai pas fait la somme des comptes pour le mois. Dans mon ensemble de données pourraient apparaître les mêmes compagnies aériennes dans un mois. Alors, gardez cela à l'esprit.

#import all needed libraries 
airline_names = ['BRITISH AIRWAYS PLC','VIRGIN ATLANTIC AIRWAYS LTD','BRITANNIA AIRWAYS AND THOMSONFLY','BRITISH AIRWAYS (EURO OPS) LGW','MONARCH AIRLINES','AIR EUROPE','FIRST CHOICE AIRWAYS LTD','CALEDONIAN AIRWAYS','BMI BRITISH MIDLAND','KLM UK LTD','ANGLO CARGO','MY TRAVEL AIRWAYS UK','LEISURE INTERNATIONAL','EXCALIBUR AIRWAYS','HEAVYLIFT','GB AIRWAYS LTD','NOVAIR INTERNATIONAL','BERLIN EUROPEAN UK','HUNTING CARGO AIRLINES LTD','TRADEWINDS AIRWAYS','LOGANAIR','DUO AIRWAYS LTD','BRITISH WORLD AIRLINES LTD','RYANAIR-EUROPE','BRITISH AIRWAYS CITIEXPRESS LTD','AIR FOYLE'] 
months = np.random.choice(range(1,13), size=40, replace=True)
counts = np.random.choice(range(200,800), size=40, replace=True)
airlines = np.random.choice(airline_names, size=40, replace=True)

df = pd.DataFrame({"Airline":airlines,"month":months,"counts":counts}) 

Et le résultat se présente comme suit:  output

J'espère qu'il est quelque chose que vous attendiez.


0 commentaires