Maison > Article > développement back-end > Comment créer des graphiques à barres empilées en cluster à l'aide de Pandas et Matplotlib ou Seaborn ?
Considérons deux cadres de données, df1 et df2, avec le même index mais des colonnes potentiellement différentes, où chacun la ligne représente une catégorie et chaque colonne représente une métrique. L'objectif est de créer des graphiques à barres empilées groupés où les barres de chaque catégorie sont regroupées et les barres de chaque trame de données sont empilées les unes sur les autres.
<code class="python">import pandas as pd import matplotlib.pyplot as plt import matplotlib.cm as cm def plot_clustered_stacked(df_list, labels=None, title="Clustered Stacked Bar Plot"): n_dataframes = len(df_list) n_columns = len(df_list[0].columns) n_index = len(df_list[0].index) fig, ax = plt.subplots() # Iterate through each dataframe for i, df in enumerate(df_list): # Plot the bars for the current dataframe df.plot(kind="bar", ax=ax, linewidth=0, stacked=True, legend=False, grid=False) # Adjust the position and width of the bars for df, j in zip(df_list, range(n_dataframes)): for n, rect in enumerate(ax.patches): if rect.get_y() == 0: # Stacked bar for dataframe df rect.set_x(rect.get_x() + j / float(n_dataframes)) rect.set_width(1 / float(n_dataframes)) # Set the x-axis labels and ticks ax.set_xticks(np.arange(0, n_index) + 0.5) ax.set_xticklabels(df.index) # Add a legend for the dataframes plt.legend([df.stack(level=0).index[0] for df in df_list], labels) # Set the plot title ax.set_title(title) # Create example dataframes df1 = pd.DataFrame(np.random.rand(4, 3), index=["A", "B", "C", "D"], columns=["x", "y", "z"]) df2 = pd.DataFrame(np.random.rand(4, 3), index=["A", "B", "C", "D"], columns=["x", "y", "z"]) # Plot the clustered stacked bar plot plot_clustered_stacked([df1, df2], labels=["df1", "df2"])</code>
<code class="python">import seaborn as sns # Concatenate the dataframes into a single dataframe with a wide format df = pd.concat([df1.reset_index().melt(id_vars=["index"]), df2.reset_index().melt(id_vars=["index"])]) # Plot the clustered stacked bar plot g = sns.FacetGrid(data=df, col="variable", hue="index") g.map_dataframe(sns.barplot, order=df["index"].unique())</code>
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!