注释的标准化单位不加起来

时间:2017-01-11 14:59:54

标签: matlab annotations matlab-figure

我正在为我拥有的大小(7x24)的数据创建一个颜色贴图,让我们用一些随机数替换它

b = randi(50,7,24);
t = imagesc(b,[min(min(b)) max(max(b))]);

现在为了添加注释,我必须知道我的轴的确切起点和终点,以便我可以添加一个矩形来选择图像中的每个点

 xPOSITION = get(gca,'Position')

xPOSITION =

    0.1300    0.1100    0.7750    0.8150

annotation('rectangle',[0.13  0.11 (0.7750 - 0.13)/24 (0.8150 -0.11)/7],'FaceColor','blue','FaceAlpha',.2)

好吧现在当我尝试将注释添加到数据的确切起点时,起点似乎很好,但实际上应该等于每个点的矩形的大小要小很多 enter image description here 根据我的计算,每个方框等于(0.7750 - 0.13)/ 24 X(0.8150 -0.11)/ 7,因为单位是标准化的,我在计算中是否有任何错误?或者注释以不同的方式工作?任何帮助将受到高度赞赏

UPDATE 只是为了测试我在注释的每个维度上添加了0.11,它似乎是确切的大小,因为我无法弄清楚

annotation('rectangle',[0.13  0.11 ((0.7750 - 0.13) +0.11)/24 ((0.8150 -0.11)+0.11)/7],'FaceColor','blue','FaceAlpha',.2)

enter image description here

1 个答案:

答案 0 :(得分:2)

Position属性是[left bottom width height] 而不是 [left bottom right top],因为您似乎正在对待它(因为您正在减去元素1从3和2从4)。要正确计算用于显示的rect,您只想将widthheight组件除以这些维度中的元素数量。

annotation('rectangle', [xPOSITION(1), xPOSITION(2), ...
                         xPOSITION(3)/size(b, 2), xPOSITION(4) / size(b,1)])

或更简单:

annotation('rectangle', xPOSITION ./ [1 1 fliplr(size(b))])

enter image description here

话虽如此,如果您只是想在数据上绘制矩形,那么您最好只创建一个rectangle对象,该对象会自动以您的数据为单位

rectangle('Position', [0.5 6.5 1 1], 'LineWidth', 5)