2016-08-22 134 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