anzahl_z = zufriedenheit.value_counts().reindex(stufen)
klassen = ["bis 25", "26-35", "36-50", "51-65"]
anzahl = np.array([38, 52, 66, 44])
breite = np.array([26, 10, 15, 15])
dichte = anzahl / breite
print(pd.DataFrame({"klasse": klassen, "anzahl": anzahl, "breite": breite,
"dichte": dichte.round(2)}).to_string(index=False))
fig, achsen = plt.subplots(2, 2, figsize=(7, 5.5))
_ = achsen[0, 0].bar(list(anzahl_z.index), anzahl_z.values, color="0.75", width=0.6)
_ = achsen[0, 0].set_title("Stabdiagramm, ordinal")
_ = achsen[0, 0].set_ylabel("Anzahl")
_ = achsen[0, 1].hist(werte, bins=15, color="0.75", edgecolor="white")
_ = achsen[0, 1].set_title("Histogramm, metrisch")
_ = achsen[0, 1].set_xlabel("Wert")
_ = achsen[1, 0].bar(klassen, anzahl, color="0.75", width=1.0, edgecolor="white")
_ = achsen[1, 0].set_title("falsch: Häufigkeit als Höhe")
_ = achsen[1, 0].set_ylabel("Anzahl")
kanten = np.r_[0, np.cumsum(breite)]
_ = achsen[1, 1].bar(kanten[:-1], dichte, width=breite, align="edge",
color="0.75", edgecolor="white")
_ = achsen[1, 1].set_xticks(kanten[:-1] + breite / 2)
_ = achsen[1, 1].set_xticklabels(klassen, fontsize=8)
_ = achsen[1, 1].set_title("richtig: Dichte als Höhe")
_ = achsen[1, 1].set_ylabel("Personen je Jahr")
plt.tight_layout()
plt.show()