Balkendiagramme in Matplotlib stapeln

Suraj Joshi 13 Juli 2021
  1. Balkendiagramme stapeln Matplotlib
  2. Stapelbalkendiagramme Matplotlib mit Pandas
Balkendiagramme in Matplotlib stapeln

Wir erzeugen Balkendiagramme in Matplotlib unter Verwendung der Methode matplotlib.pyplot.bar(). Um die Balkendiagramme eines bestimmten Datensatzes über einen anderen zu stapeln, fügen wir alle Datensätze, die wir stapeln müssen, hinzu und übergeben die Summe als Parameter bottom an die Methode bar().

import matplotlib.pyplot as plt

data1 = [30, 20, 10, 0, 0]
data2 = [20, 20, 20, 20, 0]
data3 = [50, 60, 70, 80, 100]

year = ["2015", "2016", "2017", "2018", "2019"]

fig, ax = plt.subplots(3, 1, figsize=(10, 8))

ax[0].bar(year, data1, color="red")
ax[0].legend(["C++"])
ax[1].bar(year, data2, color="yellow")
ax[1].legend(["JavaScript"])
ax[2].bar(year, data3, color="green")
ax[2].legend(["Python"])

plt.show()

Ausgabe:

Beispiel zur Erläuterung der Matplotlib Stacked bar plot Matplotlib

Hier haben wir drei separate Balkendiagramme, die die Präferenz einer Programmiersprache für die Mitarbeiter eines Unternehmens über fünf Jahre darstellen. Wir werden die Möglichkeiten diskutieren, die Balkendiagramme einer Sprache über eine andere zu stapeln, und die Gesamtauswahl an Programmiersprachen über die Jahre mit einem einzigen Balkendiagramm untersuchen.

Balkendiagramme stapeln Matplotlib

import numpy as np
import matplotlib.pyplot as plt

data1 = [30, 20, 10, 0, 0]
data2 = [20, 20, 20, 20, 0]
data3 = [50, 60, 70, 80, 100]

year = ["2015", "2016", "2017", "2018", "2019"]

plt.figure(figsize=(9, 7))
plt.bar(year, data3, color="green", label="Python")
plt.bar(year, data2, color="yellow", bottom=np.array(data3), label="JavaScript")
plt.bar(year, data1, color="red", bottom=np.array(data3) + np.array(data2), label="C++")

plt.legend(loc="lower left", bbox_to_anchor=(0.8, 1.0))
plt.show()

Ausgabe:

Balkendiagramme in Matplotlib stapeln

Es stapelt die Parzelle einer Bar auf die einer anderen. In der Darstellung zeichnen wir zuerst die data3 als Python-Daten auf, die als Basis für andere Balken dienen, und dann zeichnen wir den Balken von data2 und den Basisbalken von data3 als Basis für den Balken von data2. Um den Balken von data2 auf data3 zu stapeln, setzen wir bottom=np.array(data3).

In ähnlicher Weise verwenden wir beim Plotten des Balkens für data1 den Balkenplot von data2 und data3 als Basis. Um dies zu tun, setzen wir bottom=np.array(data3)+np.array(data2), während wir den Balken für data1 zeichnen.

Ein wichtiger Punkt, der zu beachten ist, ist, dass wir NumPy-Arrays verwenden müssen, um die Daten für den Parameter bottom hinzuzufügen. Wenn wir bottom=data3+data2 setzen, wird die Liste durch Anhängen der Elemente von data2 am Ende der Liste data3 erstellt.

Wenn wir keine NumPy-Arrays verwenden wollen, können wir das List Comprehensions verwenden, um entsprechende Elemente von Listen hinzuzufügen.

import numpy as np
import matplotlib.pyplot as plt

data1 = [30, 20, 10, 0, 0]
data2 = [20, 20, 20, 20, 0]
data3 = [50, 60, 70, 80, 100]

year = ["2015", "2016", "2017", "2018", "2019"]

plt.figure(figsize=(9, 7))
plt.bar(year, data3, color="green", label="Python")
plt.bar(year, data2, color="yellow", bottom=data3, label="JavaScript")
plt.bar(
    year,
    data1,
    color="red",
    bottom=[sum(data) for data in zip(data2, data3)],
    label="C++",
)

plt.legend(loc="lower left", bbox_to_anchor=(0.8, 1.0))
plt.show()

Ausgabe:

Stapeln von Balkendiagrammen in Matplotlib mit Hilfe des List Comprehensions

Stapelbalkendiagramme Matplotlib mit Pandas

Wir können auch die Pandas-Bibliothek in Python verwenden, um gestapelte Balkendiagramme in Python zu erzeugen.

import pandas as pd
import matplotlib.pyplot as plt

years = ["2015", "2016", "2017", "2018", "2019"]
data = {
    "Python": [50, 60, 70, 80, 100],
    "JavaScript": [20, 20, 20, 20, 0],
    "C++": [30, 20, 10, 0, 0],
}

df = pd.DataFrame(data, index=years)

df.plot(kind="bar", stacked=True, figsize=(10, 8))
plt.legend(loc="lower left", bbox_to_anchor=(0.8, 1.0))
plt.show()

Ausgabe:

Gestapelte Balkendiagramme in Matplotlib mit Pandas

Es erzeugt ein gestapeltes Balkendiagramm aus einem Pandas DataFrame, wobei das Balkendiagramm einer Spalte für jeden Index im DataFrame über eine andere gestapelt wird.

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Verwandter Artikel - Matplotlib Visualizations