Hinweis
Zum Ende springen, um den vollständigen Beispielcode herunterzuladen.
Mehrere Histogramme nebeneinander#
Dieses Beispiel plottet horizontale Histogramme verschiedener Stichproben entlang einer kategorialen x-Achse. Zusätzlich sind die Histogramme so geplottet, dass sie symmetrisch um ihre x-Position liegen, was sie sehr ähnlich zu Violinplots macht.
Um diesen hochspezialisierten Plot zu erstellen, können wir nicht die Standardmethode hist verwenden. Stattdessen verwenden wir barh, um die horizontalen Balken direkt zu zeichnen. Die vertikalen Positionen und Längen der Balken werden über die Funktion np.histogram berechnet. Die Histogramme für alle Stichproben werden unter Verwendung des gleichen Bereichs (Minimal- und Maximalwerte) und der gleichen Anzahl von Bins berechnet, sodass die Bins für jede Stichprobe an den gleichen vertikalen Positionen liegen.
Die Auswahl unterschiedlicher Bin-Anzahlen und -Größen kann die Form eines Histogramms erheblich beeinflussen. Die Astropy-Dokumentation enthält einen hervorragenden Abschnitt darüber, wie diese Parameter ausgewählt werden: http://docs.astropy.org/en/stable/visualization/histogram.html
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(19680801)
number_of_bins = 20
# An example of three data sets to compare
number_of_data_points = 387
labels = ["A", "B", "C"]
data_sets = [np.random.normal(0, 1, number_of_data_points),
np.random.normal(6, 1, number_of_data_points),
np.random.normal(-3, 1, number_of_data_points)]
# Computed quantities to aid plotting
hist_range = (np.min(data_sets), np.max(data_sets))
binned_data_sets = [
np.histogram(d, range=hist_range, bins=number_of_bins)[0]
for d in data_sets
]
binned_maximums = np.max(binned_data_sets, axis=1)
x_locations = np.arange(0, sum(binned_maximums), np.max(binned_maximums))
# The bin_edges are the same for all of the histograms
bin_edges = np.linspace(hist_range[0], hist_range[1], number_of_bins + 1)
heights = np.diff(bin_edges)
centers = bin_edges[:-1] + heights / 2
# Cycle through and plot each histogram
fig, ax = plt.subplots()
for x_loc, binned_data in zip(x_locations, binned_data_sets):
lefts = x_loc - 0.5 * binned_data
ax.barh(centers, binned_data, height=heights, left=lefts)
ax.set_xticks(x_locations, labels)
ax.set_ylabel("Data values")
ax.set_xlabel("Data sets")
plt.show()
Referenzen
Die Verwendung der folgenden Funktionen, Methoden, Klassen und Module wird in diesem Beispiel gezeigt