Produzione di più istogrammi affiancati #

Questo esempio traccia istogrammi orizzontali di diversi campioni lungo un asse x categorico. Inoltre, gli istogrammi sono tracciati in modo da essere simmetrici rispetto alla loro posizione x, rendendoli così molto simili ai grafici di violino.

Per creare questo grafico altamente specializzato, non possiamo usare il hist metodo standard. Invece usiamo barhper disegnare direttamente le barre orizzontali. Le posizioni verticali e le lunghezze delle barre vengono calcolate tramite la np.histogramfunzione. Gli istogrammi per tutti i campioni vengono calcolati utilizzando lo stesso intervallo (valori min e max) e lo stesso numero di contenitori, in modo che i contenitori per ciascun campione si trovino nelle stesse posizioni verticali.

La selezione di conteggi e dimensioni di contenitori diversi può influire in modo significativo sulla forma di un istogramma. I documenti di Astropy hanno un'ottima sezione su come selezionare questi parametri: 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()
più istogrammi affiancati

Riferimenti

L'uso delle seguenti funzioni, metodi, classi e moduli è mostrato in questo esempio:

Galleria generata da Sphinx-Gallery