Ich zeichne ein paar gestapelte Histogramme mit dem folgenden Code. Ich verwende für beide die gleichen Behälterkanten, damit sie gut ausgerichtet sind.

Wie kann ich diese in derselben Tabelle anzeigen lassen? Das heißt, ein grün / roter und ein blau / orange Balken pro Behälter - nebeneinander.

Ich habe viele Fragen und Antworten gesehen, die denen this <ähneln / a> schlägt vor, ein Balkendiagramm zu verwenden und die Breite der Balken zu berechnen, aber dies scheint etwas zu sein, das zumindest in matplotlib sofort unterstützt werden sollte.

Kann ich gestapelte Histogramme auch direkt mit Seaborn zeichnen? Ich konnte keinen Weg finden.

plt.hist( [correct_a, incorrect_a], bins=edges, stacked=True, color=['green', 'red'], rwidth=0.95, alpha=0.5)

enter image description here

plt.hist( [correct_b, incorrect_b], bins=edges, stacked=True, color=['green', 'red'], rwidth=0.95, alpha=0.5)

enter image description here

2
mibm 19 Aug. 2020 im 11:41

2 Antworten

Beste Antwort

Nun, ich denke, plt.bar ist Ihre beste Wahl hier. Um gestapelte Histogramme zu erstellen, können Sie das Argument bottom verwenden. Um zwei Balkendiagramme nebeneinander anzuzeigen, können Sie die x -Werte um einige width verschieben, genau wie in dieses Original-Matplotlib-Beispiel:

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(16, 8))

correct_a = np.random.randint(0, 20, 20)
incorrect_a = np.random.randint(0, 20, 20)
correct_b = np.random.randint(0, 20, 20)
incorrect_b = np.random.randint(0, 20, 20)
edges = len(correct_a)
width=0.35

rects1 = ax.bar(np.arange(edges), incorrect_a, width, color="red", label="incorrect_a")
rects2 = ax.bar(np.arange(edges), correct_a, width, bottom=incorrect_a, color='seagreen', label="correct_a")
rects3 = ax.bar(np.arange(edges) + width, incorrect_b, width, color="blue", label="incorrect_b")
rects4 = ax.bar(np.arange(edges) + width, correct_b, width, bottom=incorrect_b, color='orange', label="correct_b")

# placing the ticks to the middle
ticks_aligned = np.arange(edges) + width // 2
ax.set_xticks(np.arange(edges) + width / 2)
ax.set_xticklabels((str(tick) for tick in ticks_aligned))
ax.legend()

Dies ergibt:

1

1
Péter Leéh 19 Aug. 2020 im 09:33

Hier ist ein einfaches Beispiel (Histogramme sind nicht gestapelt) für 2 Histogramme, die zusammen angezeigt werden, wobei jeder Behälter neben jedem einen eigenen Platz hat:

# generating some data for this example:
a = [1,2,3,4,3,4,2,3,4,5,4,3,4,5,4,1,2,3,2,1,3,4,5,6,7,6,5,4,3,4,6,5,4,3,4]
b = [1,2,3,4,5,6,7,6,5,6,7,6,5,4,3,4,5,6,7,6,7,6,7,5,4,3,2,1,3,4,5,6,5,6,5,6,7,6,7]

# plotting 2 histograms with bars centered differently within each bin:
plt.hist(a, bins=5, align='left', rwidth=0.5)
plt.hist(b, bins=5, align='mid', rwidth=0.5, color='r')
0
BossaNova 19 Aug. 2020 im 09:05