Heim >Backend-Entwicklung >Python-Tutorial >Wie erstelle ich geclusterte gestapelte Balkendiagramme mit Pandas und Matplotlib oder Seaborn?
Betrachten Sie zwei Datenrahmen, df1 und df2, mit demselben Index, aber möglicherweise unterschiedlichen Spalten, wobei jeder Die Zeile stellt eine Kategorie dar und jede Spalte stellt eine Metrik dar. Das Ziel besteht darin, gruppierte gestapelte Balkendiagramme zu erstellen, in denen die Balken für jede Kategorie gruppiert und die Balken für jeden Datenrahmen übereinander gestapelt sind.
<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>
Das obige ist der detaillierte Inhalt vonWie erstelle ich geclusterte gestapelte Balkendiagramme mit Pandas und Matplotlib oder Seaborn?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!