2014-11-03 52 views
1

我需要了解如何使我已經歸一化的數據的三維直方圖,所以下面的區域= 1。 我歸一化3d直方圖,使得曲線下的總和= 1在Matlab中

data=[data_x,data_y]; 
[HIST,Cent]=hist3(data]; 

我看了帖子在:

MatLab: Create 3D Histogram from sampled data

但還是老樣子我無法理解的方法。任何專家可以幫助解釋如何在Matlab中做到這一點?

編輯:

我用下面的代碼:

load('of.mat') 
data=[single(theta(:)),mag(:)]; 
%define the x and y axis 
edges{1} = -180:90:180; 
edges{2} = 0:0.2:1; 
hist3(data, 'Edges',edges); 
[N,C] = hist3(data, 'Edges',edges); 
x_diff = diff(edges{1}); 
y_diff = diff(edges{2}); 
x = repmat([x_diff, x_diff(end)], length(edges{2}),1)'; 
y = repmat([y_diff, y_diff(end)], length(edges{1}),1); 
% volume of the histogram 
V_tot = sum(sum(x.*y.*N)); 
N_norm = N/V_tot; 
figure 
% plot normalized histogram 
bar3(-C{2}, N_norm'); 
axis normal 

它運作良好,但我怎樣才能改變標準化直方圖軸抽動,其消極和我的數據應該是積極的。我的data_x介於-180和180(角度)之間,data_y介於0和1之間。我無法發佈圖像。

回答

0

試試這個代碼,如果箱子平均放置,這可能會給你一個滿意的結果。

data = mvnrnd([0, 0], eye(2), 10e4); 

%define the x and y axis 
edges{1} = -4:0.5:4; 
edges{2} = -4:0.2:4; 

hist3(data, 'Edges', edges); 

[N,C] = hist3(data, 'Edges', edges); 

x_diff = diff(edges{1}); 
y_diff = diff(edges{2}); 
x = repmat([x_diff, x_diff(end)], length(edges{2}),1)'; 
y = repmat([y_diff, y_diff(end)], length(edges{1}),1); 

% volume of the histogram 
V_tot = sum(sum(x.*y.*N)); 

N_norm = N/V_tot; 

figure 
% plot normalized histogram 
bar3(-C{2}, N_norm'); 
axis normal 

請注意,bar3圖需要一些後期處理:更改軸的刻度並可能會改變條的間距和條的顏色。 我無法發佈圖片,因此您應該嘗試運行代碼並檢查結果是否可以接受。

編輯:或者您可以使用V_tot修改柱狀圖z軸上的刻度標籤。

編輯:改變Z軸的刻度標籤(無BAR3圖):

data = mvnrnd([0, 0], eye(2), 10e4); 

%define the x and y axis 
edges{1} = -4:0.5:4; 
edges{2} = -4:0.2:4; 

hist3(data, 'Edges', edges); 

[N,C] = hist3(data, 'Edges', edges); 

x_diff = diff(edges{1}); 
y_diff = diff(edges{2}); 
x = repmat([x_diff, x_diff(end)], length(edges{2}),1)'; 
y = repmat([y_diff, y_diff(end)], length(edges{1}),1); 

% volume of the histogram 
V_tot = sum(sum(x.*y.*N)); 

% change the Z tick labels 
z_tval = get(gca, 'ZTick'); 
z_norm_tval = z_tval/V_tot; 
set(gca, 'ZTickLabel', z_norm_tval) 
+0

非常感謝你。我根據你的代碼編輯了這個問題。如何改變使用V_tot的抽動? – KaMu 2014-11-04 20:22:29

+0

@KaMu我擴展了我的答案,關於如何更改刻度標籤。希望這可以幫助。我不清楚你如何得到負面價值,沒有你的數據(of.mat)很難弄清楚。也許您可以將圖片上傳到外部網站併發布鏈接。 – Arpi 2014-11-05 08:52:14

+0

@KaMu如果您認爲我的答案已解決您的問題,請接受它,下次我也能發佈圖片。謝謝。 – Arpi 2014-11-05 18:57:17

相關問題