Die Darstellung von zwei sich überschneidenden Histogrammen (oder mehr) kann zu einer ziemlich unübersichtlichen Darstellung führen. Ich finde, dass die Verwendung von Stufenhistogramme (auch bekannt als hohle Histogramme) verbessert die Lesbarkeit erheblich. Der einzige Nachteil ist, dass in Matplotlib die Standardlegende für ein Stufenhistogramm nicht richtig formatiert ist, so dass sie wie im folgenden Beispiel bearbeitet werden kann:
import numpy as np # v 1.19.2
import matplotlib.pyplot as plt # v 3.3.2
from matplotlib.lines import Line2D
rng = np.random.default_rng(seed=123)
# Create two normally distributed random variables of different sizes
# and with different shapes
data1 = rng.normal(loc=30, scale=10, size=500)
data2 = rng.normal(loc=50, scale=10, size=1000)
# Create figure with 'step' type of histogram to improve plot readability
fig, ax = plt.subplots(figsize=(9,5))
ax.hist([data1, data2], bins=15, histtype='step', linewidth=2,
alpha=0.7, label=['data1','data2'])
# Edit legend to get lines as legend keys instead of the default polygons
# and sort the legend entries in alphanumeric order
handles, labels = ax.get_legend_handles_labels()
leg_entries = {}
for h, label in zip(handles, labels):
leg_entries[label] = Line2D([0], [0], color=h.get_facecolor()[:-1],
alpha=h.get_alpha(), lw=h.get_linewidth())
labels_sorted, lines = zip(*sorted(leg_entries.items()))
ax.legend(lines, labels_sorted, frameon=False)
# Remove spines
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
# Add annotations
plt.ylabel('Frequency', labelpad=15)
plt.title('Matplotlib step histogram', fontsize=14, pad=20)
plt.show()
Wie Sie sehen können, sieht das Ergebnis recht sauber aus. Dies ist besonders nützlich, wenn sich mehr als zwei Histogramme überlappen. Je nachdem, wie die Variablen verteilt sind, kann dies für bis zu etwa 5 überlappende Verteilungen funktionieren. Bei mehr Überschneidungen müsste eine andere Art von Diagramm verwendet werden, z. B. eines der folgenden aquí .