Noter
Cliquez ici pour télécharger l'exemple de code complet
Produire plusieurs histogrammes côte à côte #
Cet exemple trace des histogrammes horizontaux de différents échantillons le long d'un axe x catégorique. De plus, les histogrammes sont tracés pour être symétriques par rapport à leur position x, ce qui les rend très similaires aux tracés de violon.
Pour faire ce graphique hautement spécialisé, nous ne pouvons pas utiliser la hist
méthode standard. Au lieu de cela, nous utilisons barh
pour dessiner directement les barres horizontales. Les positions verticales et les longueurs des barres sont calculées via la
np.histogram
fonction. Les histogrammes de tous les échantillons sont calculés en utilisant la même plage (valeurs min et max) et le même nombre de bacs, de sorte que les bacs de chaque échantillon se trouvent dans les mêmes positions verticales.
La sélection de différents nombres et tailles de bacs peut affecter de manière significative la forme d'un histogramme. Les documents Astropy ont une excellente section sur la façon de sélectionner ces paramètres : 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()
Références
L'utilisation des fonctions, méthodes, classes et modules suivants est illustrée dans cet exemple :