2 votes

plusieurs diagrammes à barres basés sur la colonne du mois

J'ai besoin de 12 parcelles ( fig, axes = plt.subplots(4,3) ) et dans chacun d'eux, j'ai besoin d'un diagramme à barres dont l'axe des x est Airline et l'axe des ordonnées représente leur nombre pour chaque mois.

Par exemple, pour le mois 1 --> x-axis='Airline' y y-axis='counts' et j'apprécie également que chaque barre soit de couleur différente.

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

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

J'ai essayé quelque chose comme,

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

La parcelle ci-dessous ne contient que 7 mois.

enter image description here

Mais cela ne renvoie qu'un seul graphique avec toutes les valeurs ajustées, ce qui n'est pas le résultat escompté.

1voto

Reedinationer Points 5037

Je n'ai pas reçu votre jeu de données original, 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 sera exécuté si vous le copiez/collez. Il ne vous reste plus qu'à lui fournir vos jeux de données. Vous pouvez spécifier des couleurs basées sur des noms comme je l'ai montré, et aussi les étiqueter en tant que tels (c'est pourquoi une fonction pour faire cela est géniale afin que vous n'ayez pas à copier/coller 12 fois).

1voto

Rafzy15 Points 56

Je travaillais sur mon propre ensemble de données, il ne pouvait donc pas être parfait. Cependant, il devrait également fonctionner avec vos données.

Je travaillais sur des données générées par quelque chose de ce genre :

#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}) 

J'ai supposé qu'il n'y avait qu'une seule compagnie aérienne par mois, et je n'ai donc pas fait la somme des comptes pour le mois. Dans mon ensemble de données, les mêmes compagnies aériennes peuvent apparaître au cours d'un même mois. Il faut donc garder cela à l'esprit.

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

Le résultat est le suivant : output

J'espère qu'il répondra à vos attentes.

0voto

Victor Valente Points 419

C'est 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 obtiendrez quelque chose comme ceci : enter image description here

Vérifier Page du graphique en barres de seaborn .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X