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, barhum die horizontalen Balken direkt zu zeichnen. Die vertikalen Positionen und Längen der Balken werden über die np.histogramFunktion 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()
mehrere Histogramme nebeneinander

Verweise

In diesem Beispiel wird die Verwendung der folgenden Funktionen, Methoden, Klassen und Module gezeigt:

Galerie generiert von Sphinx-Gallery