如何在图表中标记(“垂直”)点

时间:2016-07-13 09:22:44

标签: matlab

我想使用命令scatter为某些点添加标签。为简单起见,假设我只有一点:

x = 10;
pointSize = 100;
fontSize = 20;

P = scatter(x, 0, pointSize, [0,0,0], 'filled');

text(x, 0, 'pointLabel',... 
     'HorizontalAlignment', 'center',...
     'VerticalAlignment', 'bottom',... 
     'FontSize', fontSize);

以前命令的问题在于,文字pointLabel与点P重叠,具体取决于分配给属性pointsizefontSize的值。

我已阅读text命令的文档,但这些示例仅显示如何将标签与图中的特定点水平对齐。如果对齐需要水平,这很容易,但我找不到从其他维度的值计算标签y的{​​{1}}坐标的一般方法。

显然,我可以通过测试各种值的组合来达到良好的对齐,但我正在寻找一个通用的解决方案。

有没有人可以帮助我?

1 个答案:

答案 0 :(得分:1)

这假设您使用的是> = R2014b,但也可以使用setget命令在旧版本中完成。

创建文本对象时,其默认单位是数据坐标,但可以更改这些单位。在你的情况下,我会选择积分。

x = 10;
pointSize = 100;
fontSize = 20;

P = scatter(x, 0, pointSize, [0,0,0], 'filled');

t = text(x, 0, 'pointLabel',... 
     'HorizontalAlignment', 'center',...
     'VerticalAlignment', 'bottom',... 
     'FontSize', fontSize);

% It's always a good idea to switch back to the default units, so remember them.
originalUnits = t.Units; 
t.Units = 'points';

% Shift the text up by the sqrt(pi)/2 times the radius of the point
t.Position(2) = t.Position(2) + sqrt(pointSize)/2;
t.Units = originalUnits;

查看Text Properties了解详情。如果您想变得非常复杂,可以使用只读属性Extent和您已知的标记大小和位置来计算标签何时与您的某个点重叠。由于默认单位在数据空间中,因此无需转换。

如果您正在使用旧版本的MATLAB,所有这些选项和属性仍然可用,您只需要更加努力地使用它们。例如,您无法按上述方向设置位置,但您可以使用get将其分配给临时变量,更改它,然后使用set进行更新。更多行代码,但最终效果相同。