我正在使用Octave中的plot
命令来绘制y
与x
值。有没有一种方法可以让图表也显示绘制在图表本身上的每个坐标的(x,y)
值?
我尝试使用 help
命令,但找不到任何此类选项。
另外,如果不可能,有没有办法使用任何其他绘图函数来做到这一点?
您是否尝试过在每个坐标上显示文本框?
假设x
和y
是已经存储在 MATLAB 中的坐标,您可以执行以下操作:
plot(x, y, 'b.');
for i = 1 : numel(x) %// x and y are the same lengths
text(x(i), y(i), ['(' num2str(x(i)) ',' num2str(y(i)) ')']);
end
上面的代码将获取图形中的每个点,并以(x,y)
格式放置一个文本框(没有边框),其中 x 和 y 是所有点的坐标。
备注:您可能需要调整文本框的位置,因为上面的代码会将每个文本框放在每对坐标的正上方。 您可以通过在text
函数的第一个和第二个参数中添加/减去适当的常量来尝试。(即 text(x(i) + 1, y(i) - 1, .......);
但是,如果您想要快速并用于说明目的,那么上面的代码就可以了。
这是我用来做类似事情的方法。为标签生成字符串是最尴尬的部分,真的(我每个标签只有一个数字,这要简单得多)
x = rand(1, 10);
y = rand(1, 10);
scatter(x, y);
% create a text object for each point
t = text(x, y, '');
% generate a cell array of labels - x and y must be row vectors in this case
c = strsplit(sprintf('%.2g,%.2gn',[x;y]), 'n');
c(end) = []; % the final n gives us an extra empty cell, remove it
c = c'; % transpose to match the dimensions of t
% assign each label to each text object
set(t, {'String'}, c);
您可能想尝试各种属性,如'HorizontalAlignment'
、'VerticalAlignment'
和'Margin'
,以根据自己的喜好调整标签位置。
经过一番深思熟虑,这里有一种替代的、更强大的方法来生成合适的坐标标签单元格数组:
c = num2cell([x(:) y(:)], 2);
c = cellfun(@(x) sprintf('%.2g,%.2g',x), c, 'UniformOutput', false);
有一个非常有用的包标签点在MathWorks文件交换中,这正是这样做的。它具有许多方便的功能。