2013-07-17 119 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