Notiz
Klicken Sie hier , um den vollständigen Beispielcode herunterzuladen
Mehrere Histogramme nebeneinander erzeugen #
In diesem Beispiel werden horizontale Histogramme verschiedener Stichproben entlang einer kategorialen x-Achse dargestellt. Außerdem werden die Histogramme so gezeichnet, dass sie symmetrisch zu ihrer x-Position sind, wodurch sie sehr ähnlich zu Violin-Plots werden.
Um dieses hochspezialisierte Diagramm 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
np.histogram
Funktion berechnet. Die Histogramme für alle Proben werden unter Verwendung des gleichen Bereichs (Mindest- und Höchstwerte) und der Anzahl der Bins berechnet, sodass sich die Bins für jede Probe in denselben vertikalen Positionen befinden.
Die Auswahl unterschiedlicher Bin-Anzahlen und -Größen kann die Form eines Histogramms erheblich beeinflussen. Die Astropy-Dokumentation enthält einen großartigen Abschnitt zur Auswahl dieser Parameter: http://docs.astropy.org/en/stable/visualization/histogram.html
import numpy as np
import matplotlib.pyplot as plt
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()
Verweise
In diesem Beispiel wird die Verwendung der folgenden Funktionen, Methoden, Klassen und Module gezeigt: