2013-07-17 113 views
1

我正在用MATLAB繪製三維直方圖,除了不同的軸範圍外,它的工作還算不錯。我希望以某種方式來定義它們,等價值對位於平分線上。Hist3繪圖和軸範圍

我的代碼看起來像這樣(或多或少從hist3 MATLAB例如「偷」):

[vec_voxel_ids, vec_dose_values_reference, vec_dose_values_control] = ... 
    textread('_BOOSTINT_voxel_data.txt', '%u %u %u'); 
mat_dose_values = [vec_dose_values_reference, vec_dose_values_control]; 
hist3(mat_dose_values, [100, 100]); 
xlabel('Dose Reference'); 
ylabel('Dose Control'); 
set(gcf, 'renderer', 'opengl'); 
set(get(gca,'child'), 'FaceColor', 'interp', 'CDataMode', 'auto'); 

這是它的外觀: histogram

+1

你能更準確地回答你的問題和你正在嘗試的嗎?你想用'axis'來調整軸的極限嗎? 「等值對位於平分線上」是什麼意思?此外,您提供的代碼默認情況下會提供3-D視圖,我認爲您錯過了對「view(2)」或其他類似內容的調用以獲取像您提供的圖像。 – horchler

+0

我有兩個向量值從0-1000,我結合到一個nx2矩陣。如果相同指數的兩個值相同,則它們應位於平分線上。在圖像中,情況並非如此。我提供的這段代碼是我爲獲得上面的圖像而做的唯一的事情。 – Schnigges

+0

當然,我將相機角度更改爲僅查看3d直方圖的2D投影,對不起 – Schnigges

回答

4

爲了重新定位箱對齊他們以ticks爲中心,還可以選擇hist3'edges'選項(與histc類似)的bin值範圍:

data = 500+5*randn(1e3,2);   % dummy data 
d = 1;        % width for x and y bins 
x = 480:d:520;      % range for x bins 
y = x;        % use same range for y bins, can be different 
hist3(data, 'edges', {x-d/2,y-d/2}); % subtract half bin width to center bins 
set(gcf, 'renderer', 'opengl'); 
set(get(gca,'child'), 'FaceColor', 'interp', 'CDataMode', 'auto'); 
view(2) 
axis equal 
axis([478 522 478 522]) 
grid minor 
xlabel('x') 
ylabel('y') 

這個例子會產生這樣的事情: hist3 output

請注意,這是您的數據進行重新分級,以便您的輸出可能會比前略有不同。箱子已經移動以調整它們的中心並重新計算直方圖。

+0

好的,那很有幫助。我添加了兩行「axis equal」和 「axis([x1 y1 x2 y2])」,結果如我所料。這本身就是數據的重新裝箱嗎?在我的理解中,這只是重新定位垃圾箱。 – Schnigges

+1

很高興我明白了。至少在你的示例代碼中,你是自動裝箱的 - 只需要100個100個垃圾箱。在這種情況下,'hist3'模仿'hist'的行爲,而不是'histc'的位置。輸入'edit hist3',並查看第164行的代碼,如果你想了解詳情。所以,是的,垃圾桶邊緣的位置將在稍微不同的位置。 – horchler

+0

順便說一下,在我的代碼中,命令'hist3(data,'edges',{xd/2,yd/2});'可以替換爲'hist3(data,{x,y});'to使用「Ctrs''參數。然而,在'hist3'下引用''邊緣''參數並調用'hictc'。如果你知道你想要什麼和你有什麼,明確指定你的垃圾桶的邊緣是有意義的。 – horchler