Création de diagrammes à barres empilées en cluster avec Pandas et Matplotlib
Dans cet article, nous explorerons une méthode pour créer des diagrammes à barres empilées en cluster à l'aide de Pandas. et Matplotlib. Cette technique vous permet de visualiser plusieurs ensembles de données avec des colonnes et un index identiques côte à côte, avec des barres empilées les unes sur les autres.
Comprendre le problème
Considérez ce qui suit scénario : vous disposez de trois trames de données, chacune contenant des valeurs pour les colonnes "I" et "J" avec le même index. Vous souhaitez créer des graphiques à barres empilées pour chaque trame de données mais disposés d'une manière spécifique :
Implémentation de la solution
L'extrait de code suivant démontre une solution efficace à ce problème :
<code class="python">import pandas as pd import matplotlib.cm as cm import numpy as np import matplotlib.pyplot as plt def plot_clustered_stacked(dfall, labels=None, title="multiple stacked bar plot", H="/", **kwargs): """Given a list of dataframes, with identical columns and index, create a clustered stacked bar plot. labels is a list of the names of the dataframe, used for the legend title is a string for the title of the plot H is the hatch used for identification of the different dataframe""" n_df = len(dfall) n_col = len(dfall[0].columns) n_ind = len(dfall[0].index) axe = plt.subplot(111) for df in dfall : # for each data frame axe = df.plot(kind="bar", linewidth=0, stacked=True, ax=axe, legend=False, grid=False, **kwargs) # make bar plots h,l = axe.get_legend_handles_labels() # get the handles we want to modify for i in range(0, n_df * n_col, n_col): # len(h) = n_col * n_df for j, pa in enumerate(h[i:i+n_col]): for rect in pa.patches: # for each index rect.set_x(rect.get_x() + 1 / float(n_df + 1) * i / float(n_col)) rect.set_hatch(H * int(i / n_col)) #edited part rect.set_width(1 / float(n_df + 1)) axe.set_xticks((np.arange(0, 2 * n_ind, 2) + 1 / float(n_df + 1)) / 2.) axe.set_xticklabels(df.index, rotation = 0) axe.set_title(title) # Add invisible data to add another legend n=[] for i in range(n_df): n.append(axe.bar(0, 0, color="gray", hatch=H * i)) l1 = axe.legend(h[:n_col], l[:n_col], loc=[1.01, 0.5]) if labels is not None: l2 = plt.legend(n, labels, loc=[1.01, 0.1]) axe.add_artist(l1) return axe # create fake dataframes df1 = pd.DataFrame(np.random.rand(4, 5), index=["A", "B", "C", "D"], columns=["I", "J", "K", "L", "M"]) df2 = pd.DataFrame(np.random.rand(4, 5), index=["A", "B", "C", "D"], columns=["I", "J", "K", "L", "M"]) df3 = pd.DataFrame(np.random.rand(4, 5), index=["A", "B", "C", "D"], columns=["I", "J", "K", "L", "M"]) # Then, just call : plot_clustered_stacked([df1, df2, df3],[“df1”, “df2”, “df3”])</code>
Utilisation de la fonction
Pour utiliser cette fonction, transmettez une liste de trames de données comme premier argument. L'argument suivant peut être une liste d'étiquettes pour la légende. L'argument titre spécifie le titre de l'intrigue. Enfin, H représente le motif de hachures utilisé pour différencier chaque trame de données.
Sortie
Le tracé résultant affichera des barres empilées groupées pour chaque trame de données, disposées côte à côte. Les barres de chaque index seront empilées les unes sur les autres, avec différentes hachures indiquant différentes trames de données.
Fonctionnalités supplémentaires
Personnalisation des couleurs :
Vous pouvez personnaliser les couleurs des barres en passant un argument cmap à la fonction plot_clustered_stacked, qui prend une instance d'une palette de couleurs matplotlib. Voici un exemple :
<code class="python">plot_clustered_stacked([df1, df2, df3], ["df1", "df2", "df3"], cmap=plt.cm.viridis)</code>
Conclusion
Cette approche fournit une méthode simple et efficace pour créer des diagrammes à barres empilées en cluster à l'aide de Pandas et Matplotlib. Il vous permet de visualiser plusieurs ensembles de données côte à côte de manière claire et informative. En ajustant les motifs et les couleurs des hachures, vous pouvez personnaliser davantage le tracé pour l'adapter à vos besoins spécifiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!