Maison > Article > développement back-end > Comment créer des diagrammes à barres empilées en cluster dans Pandas et Matplotlib ?
Clustering de barres empilées dans Pandas et Matplotlib
Introduction
Cet article aborde le problème de création de graphiques à barres empilées avec des barres groupées pour plusieurs trames de données partageant le même index et les mêmes colonnes. L'objectif est d'avoir des barres empilées regroupées par index, garantissant la clarté de la visualisation.
Utilisation de Pandas et Matplotlib
La solution exploite les capacités des bibliothèques Pandas et Matplotlib. Voici le code :
<code class="python">import pandas as pd import matplotlib.cm as cm import matplotlib.pyplot as plt def plot_clustered_stacked(dfall, labels=None, title="multiple stacked bar plot"): 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) 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("/" * 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="/" * i)) l1 = axe.legend(h[:n_col], l[:n_col]) if labels is not None: l2 = plt.legend(n, labels) axe.add_artist(l1) return axe</code>
Pour utiliser cette fonction, transmettez simplement une liste de dataframes et d'arguments facultatifs tels que les étiquettes et le titre. Il produira des barres empilées groupées avec des hachures pour différencier les trames de données.
Exemple
Voici un exemple utilisant cette fonction :
<code class="python"># 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"]) # plot clustered stacked bar plot_clustered_stacked([df1, df2, df3], ["df1", "df2", "df3"])</code>
Fonctionnalités supplémentaires
Vous pouvez personnaliser les couleurs des barres en passant un cmap argument :
<code class="python">plot_clustered_stacked([df1, df2, df3], ["df1", "df2", "df3"], cmap=plt.cm.viridis)</code>
Conclusion
Cette solution offre un moyen flexible et pratique de créer des tracés à barres empilées en cluster. Vous pouvez facilement modifier le code pour répondre aux exigences spécifiques de votre visualisation de données.
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!