2017-09-05 1 views
1

J'ai une matrice A (20374, 1). Je voudrais dessiner l'histogramme (DVH) en utilisant ces données.Dessin de l'histogramme à l'aide de Python

Mon code est le suivant.

edge_A = np.linespace(0, max(A), 1000) 
x_A = np.linespace(0.5*max(A)/1000, max(A), 1000) 
n_A = np.histogram(A, bins=edge_A) 
y_A = 1 - np.cumsum(n_A/len(A), axis=0) 
plt.figure() 
plt.plot(x_A, y_A) 
plt.show() 

Mais, ce code est fonctionne pas dans la ligne de ÿ_à parce Nc est tuple et len ​​(A) est un entier, donc ce ne peut pas être calculé. Aussi, je pense que la ligne de n_A n'est pas correcte.

Comment puis-je résoudre ce problème.

Je joins le code MATLAB dans cette partie qui fonctionne bien.

edge_A = 0:max(A)/1000:max(A); 
x_A = 0.5*max(A)/1000:max(A)/1000:max(A); 
n_A = hiscounts(A, edge_A) 
y_A = 1 - cumsum(n_A/length(A)); 
plot(x_A, y_A); 

Répondre

0

Le problème est que revient np.histogram deux valeurs comme tuple:

Returns 
------- 
hist : array 
    The values of the histogram. See `density` and `weights` for a 
    description of the possible semantics. 
bin_edges : array of dtype float 
    Return the bin edges ``(length(hist)+1)``. 

Cela semble fonctionner:

A = np.random.rand(100000) 
edge_A = np.linspace(0, max(A), 1000) 
x_A = np.linspace(0.5*max(A)/1000, max(A), 1000) 
(n_A, _) = np.histogram(A, bins=edge_A,) 
y_A = 1 - np.cumsum(n_A/len(A), axis=0) 
plt.figure() 
plt.plot(x_A[1:], y_A) 
plt.show() 

Il est plus facile à utiliser juste matplotlib:

plt.hist(A, 1000, cumulative=True) 
0

Si vous voulez juste tracer les données, vous pouvez utiliser directement matplotlib:

import numpy as np 
import matplotlib.pylab as plt 

a = np.random.normal(loc=0.0, scale=1.0, size=int(1e4)) 
plt.figure() 
plt.hist(a) 
plt.show() 

enter image description here