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:
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:
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:
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:
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 is a backend software engineer at Matrice.ai.
LinkedIn