Clustering Stacked Bars in Pandas und Matplotlib
Einführung
Dieser Artikel befasst sich mit dem Problem von Erstellen gestapelter Balkendiagramme mit gruppierten Balken für mehrere Datenrahmen mit demselben Index und denselben Spalten. Ziel ist es, gruppierte gestapelte Balken pro Index zu haben, um Klarheit in der Visualisierung zu gewährleisten.
Verwendung von Pandas und Matplotlib
Die Lösung nutzt die Funktionen der Pandas- und Matplotlib-Bibliotheken. Hier ist der 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>
Um diese Funktion zu verwenden, übergeben Sie einfach eine Liste von Datenrahmen und optionalen Argumenten wie Beschriftungen und Titel. Es werden gruppierte gestapelte Balken mit Schraffuren zur Unterscheidung der Datenrahmen erstellt.
Beispiel
Hier ist ein Beispiel für die Verwendung dieser Funktion:
<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>
Zusätzliche Funktionen
Sie können die Farben der Balken anpassen, indem Sie ein cmap-Argument übergeben:
<code class="python">plot_clustered_stacked([df1, df2, df3], ["df1", "df2", "df3"], cmap=plt.cm.viridis)</code>
Fazit
Diese Lösung bietet eine flexible und bequeme Möglichkeit, gruppierte gestapelte Balkendiagramme zu erstellen. Sie können den Code ganz einfach ändern, um ihn an die spezifischen Anforderungen Ihrer Datenvisualisierung anzupassen.
Das obige ist der detaillierte Inhalt vonWie erstelle ich geclusterte gestapelte Balkendiagramme in Pandas und Matplotlib?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!