Imposta manualmente la dimensione dei contenitori nell'istogramma Matplotlib

  1. Bin Boundaries come parametro per la funzione hist()
  2. Calcola il numero di contenitori dalla larghezza desiderata

Per disegnare l’istogramma, usiamo la funzione hist2d() dove il numero di bin n viene passato come parametro. Possiamo impostare la dimensione dei contenitori calcolando il numero di contenitori richiesto per mantenere la dimensione richiesta.

Bin Boundaries come parametro per la funzione hist()

Sintassi per funzione hist:

hist (x,
      bins: NoneType=None,
      range: NoneType=None,
      density: NoneType=None,
      weights: NoneType=None,
      cumulative: bool=False,
      bottom: NoneType=None,
      histtype: str=built-ins.str,
      align: str=built-ins.str,
      orientation: str=built-ins.str,
      rwidth: NoneType=None,
      log: bool=False,
      color: NoneType=None,
      label: NoneType=None,
      stacked: bool=False,
      normed: NoneType=None,
      data: NoneType=None,
      **kwargs)

Per impostare la dimensione dei bin in Matplotlib, passiamo una lista con i limiti dei bin invece del numero di bin come parametro bin.

import numpy as np
import numpy.random as random
import matplotlib.pyplot as plt

data = np.random.random_sample(100) * 100.0
plt.hist(data, bins=[0, 10, 20, 30, 40, 50, 60, 80, 100])
plt.xlabel('Value')
plt.ylabel('Counts')
plt.title('Histogram Plot of Data')
plt.grid(True)
plt.show()

imposta la dimensione dei contenitori nell'lista di passaggio di Matplotlib come parametro

Nell’esempio sopra, impostiamo manualmente i limiti del bin e indirettamente la larghezza del bin. Potremmo anche usare np.arange per trovare confini equidistanti.

Per rendere i bin equidistanti, possiamo usare np.arange per trovare confini equidistanti

import numpy as np
import numpy.random as random
import matplotlib.pyplot as plt

binwidth=10
data = np.random.random_sample(100) * 100.0
plt.hist(data, bins=np.arange(min(data), max(data) + binwidth, binwidth))
plt.xlabel('Data')
plt.ylabel('Counts')
plt.title('Histogram Plot of Data')
plt.grid(True)
plt.show()

Bins equamente distribuiti in Matplotlib passando l'lista come parametro

Attenzione

Il secondo parametro di np.arange deve essere max(data) + binwidth ma non max(data), perché l’intervallo creato da np.arange(start, stop, step) include start ma esclude stop. Pertanto, dobbiamo aggiungere l’intervallo binwidth a max(data) per rendere lo stop effettivo come max(data).

Calcola il numero di contenitori dalla larghezza desiderata

Per trovare il numero di contenitori, calcoliamo il risultato di valore massimo-valore minimo diviso per la larghezza del contenitore desiderata.

import numpy as np
import matplotlib.pyplot as plt

def find_bins(observations, width):
    minimmum = np.min(observations)
    maximmum = np.max(observations)
    bound_min = -1.0 * (minimmum % width - minimmum)
    bound_max = maximmum - maximmum % width + width
    n = int((bound_max - bound_min) / width) + 1
    bins = np.linspace(bound_min, bound_max, n)
    return bins

data = np.random.random_sample(120) * 100
bins = find_bins(data, 10.0)
plt.hist(data, bins=bins)
plt.xlabel('Data')
plt.ylabel('Counts')
plt.title('Histogram Plot')
plt.show() 

trova il numero di contenitori dalla larghezza data

Articolo correlato - Matplotlib Histogram

  • Traccia due istogrammi insieme in Matplotlib