Sto usando matplotlib.pyplot per creare istogrammi. Non sono interessato alle trame di questi istogrammi, ma sono interessato alle frequenze e ai bin (so che posso scrivere il mio codice per farlo, ma preferirei usare questo pacchetto).Un modo per creare un istogramma con matplotlib.pyplot senza tracciare l'istogramma?
so di poter fare quanto segue,
import numpy as np
import matplotlib.pyplot as plt
x1 = np.random.normal(1.5,1.0)
x2 = np.random.normal(0,1.0)
freq, bins, patches = plt.hist([x1,x1],50,histtype='step')
per creare un istogramma. Tutto ciò di cui ho bisogno è freq[0]
, freq[1]
e bins[0]
. Il problema si verifica quando provo e uso,
freq, bins, patches = plt.hist([x1,x1],50,histtype='step')
in una funzione. Ad esempio,
def func(x, y, Nbins):
freq, bins, patches = plt.hist([x,y],Nbins,histtype='step') # create histogram
bincenters = 0.5*(bins[1:] + bins[:-1]) # center bins
xf= [float(i) for i in freq[0]] # convert integers to float
xf = [float(i) for i in freq[1]]
p = [ (bincenters[j], (1.0/(xf[j] + yf[j])) for j in range(Nbins) if (xf[j] + yf[j]) != 0]
Xt = [j for i,j in p] # separate pairs formed in p
Yt = [i for i,j in p]
Y = np.array(Yt) # convert to arrays for later fitting
X = np.array(Xt)
return X, Y # return arrays X and Y
quando chiamo func(x1,x2,Nbins)
e la trama o stampare X
e Y
, non ottengo la mia curva/valori attesi. Sospetto che abbia a che fare con lo plt.hist
, poiché nella mia trama c'è un istogramma parziale.
Perché non si utilizza np.histogram()? – Pablo
Grazie per il suggerimento. Sembra che il problema risieda altrove. Se eseguo il codice sopra indicato riga per riga (non come funzione), funziona sia con np.histogram() che con plt.hist(). Qualche idea sul perché utilizzare questo in una funzione non funziona? – user1175720