2016-08-22 115 views
0

我有2個陣列數據xy的兩者22250逐54,以及我試圖使用hist3imagesc使密度繪製每個x(:,n)y(:,n)對,其中n = 1:54Matlab的Hist3 /於imagesc軸縮放

我使用imagesc(values2)其中:

values2 = hist3([x(:) y(:)],[round(max(x)) round(max(y)) ]); 

爲我的論點用它來繪製每個54個xy值來獲得一個獨特的軸線範圍,它工作正常。然而,當我把固定的整數值爲values2

values2 = hist3([x(:) y(:)],[50 50 ]); 

的實際值對每個xy端了54列的越來越縮放到[50 50]參數或者如果我使用[100 100 ]並且它不反映每個xy的實際值。我如何修復軸線x,y範圍並將實際值保持在固定軸範圍內?

我曾嘗試也在呼籲imagesc(values2)後單獨調用使用xlimylim這並不工作,要麼 - 它繪製在一個很小的區域我的數據和樹葉很多的圖像區域周圍的空白。

謝謝你的幫助!

我已經嘗試了「選中」從下面的鏈接響應去我現在身在何處: Scatter plot with density in Matlab

+0

x軸和y軸的值或數據的範圍是不相等的。 x變量是風速,y變量是溫度。謝謝 – user2100039

+0

x變量的預期範圍可能是0到30(風速),預期的y變量範圍包括所有54個例子可能是-20到+40。謝謝。 – user2100039

+0

嗨 - 是的,這與我當前的代碼工作方式相同。 x和y軸範圍隨着每個新圖而變化。這不是我需要的。我想比較上面每種情況下相同或固定的x和y軸範圍的數據傳播情況,其中n = 1:54。謝謝! – user2100039

回答

0

使用answer you referenced你可以寫:

% some arbitrary data: 
x = randi(30,30,54); 
y = randi(61,30,54)-21; 

% constant values for every n: 
nbins = [round(range(y(:))) round(range(x(:)))]+1; 
x_lim = [min(x(:)) max(x(:))]; 
y_lim = [min(y(:)) max(y(:))]; 

% plotting: 
for n = 1:9 
    [values2, centers] = hist3([x(:,n) y(:,n)],nbins); 
    subplot(3,3,n) % this is just for compact demonstration 
    h = imagesc(centers{:},values2.'); 
    title(num2str(n)) 
    xlim(x_lim) % keeping the x-axis limits constant 
    ylim(y_lim) % keeping the y-axis limits constant 
    axis xy 
end 

請注意,你可能會得到如本例所示,如果x(:,n)y(:,n)中的數據的範圍較小,則y(:)x(:,n)

這將給: imagesc hist

+0

我試過你的解決方案。第一個情節是好的。循環中的第二個圖或者當n == 2時,我在values2變量「索引超出矩陣維數」上出現錯誤。你的想法?此外,軸標籤或x和y刻度標籤是十進制形式而不是整數。謝謝, – user2100039

+0

我在沒有錯誤的循環中運行它,你能複製出錯的那一行嗎?至於標籤,這可以使用'sprintf'編輯我會將它添加到答案,但我不知道你想看到什麼 – EBH

+0

values2 = hist3([y(:,n)x(:,n) ],[round(range(y(:,n)))round(range(x(:,n)))]); – user2100039