2017-09-05 124 views
1

我有一個矩陣A(20374,1)。 我想使用這些數據繪製直方圖(DVH)。使用Python繪製直方圖

我的代碼如下。

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() 

但是,這個代碼是不是在Y_A的線工作,因爲N_A是元組和len(A)爲int,所以這不能被計算出來。 另外,我認爲n_A的行不正確。

我該如何解決這個問題。

我在這部分運行良好的附加matlab代碼。

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); 

回答

0

的問題是,np.histogram返回兩個值的元組:

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)``. 

這似乎工作:

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() 

這是比較容易,只需使用matplotlib:

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

如果你只是想繪製數據,你可以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