Erstellen gruppierter gestapelter Balkendiagramme mit Pandas und Matplotlib
In diesem Artikel werden wir eine Methode zum Erstellen gruppierter gestapelter Balkendiagramme mit Pandas untersuchen und Matplotlib. Mit dieser Technik können Sie mehrere Datensätze mit identischen Spalten und Indizes nebeneinander visualisieren, wobei die Balken übereinander gestapelt sind.
Das Problem verstehen
Bedenken Sie Folgendes Szenario: Sie haben drei Datenrahmen, die jeweils Werte für die Spalten „I“ und „J“ mit demselben Index enthalten. Sie möchten für jeden Datenrahmen gestapelte Balkendiagramme erstellen, die jedoch auf eine bestimmte Weise angeordnet sind:
Implementierung der Lösung
Der folgende Codeausschnitt zeigt eine effiziente Lösung für dieses Problem:
<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>
Verwenden der Funktion
Um diese Funktion zu verwenden, übergeben Sie eine Liste von Datenrahmen als erstes Argument. Das nächste Argument kann eine Liste von Beschriftungen für die Legende sein. Das Argument title gibt den Titel der Handlung an. Schließlich stellt H das Schraffurmuster dar, das zur Unterscheidung jedes Datenrahmens verwendet wird.
Ausgabe
Das resultierende Diagramm zeigt gruppierte gestapelte Balken für jeden Datenrahmen nebeneinander angeordnet an. Die Balken für jeden Index werden übereinander gestapelt, wobei unterschiedliche Schraffuren unterschiedliche Datenrahmen anzeigen.
Zusätzliche Funktionen
Farben anpassen:
Sie können die Farben der Balken anpassen, indem Sie ein cmap-Argument an die Funktion plot_clustered_stacked übergeben, die eine Instanz einer Matplotlib-Farbkarte annimmt. Hier ist ein Beispiel:
<code class="python">plot_clustered_stacked([df1, df2, df3], ["df1", "df2", "df3"], cmap=plt.cm.viridis)</code>
Fazit
Dieser Ansatz bietet eine einfache und effektive Methode zum Erstellen gruppierter gestapelter Balkendiagramme mit Pandas und Matplotlib. Es ermöglicht die übersichtliche und informative Visualisierung mehrerer Datensätze nebeneinander. Durch Anpassen der Schraffurmuster und -farben können Sie die Darstellung noch weiter an Ihre spezifischen Anforderungen anpassen.
Das obige ist der detaillierte Inhalt vonWie kann ich mit Pandas und Matplotlib gruppierte gestapelte Balkendiagramme in Python erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!