有许多不同的途径可以从这些数据提示游标中获得更高的精度:
1) 手动导出:
正如您在问题中提到的,右键单击数据提示,然后选择 Export cursor data to workspace...。假设您在默认变量cursor_info 中导出它,然后您会得到一个包含 3 个字段的结构:
cursor_info =
Target: 492.0040
Position: [7.3593e+05 10.6353]
DataIndex: 7
Target 是line 对象的句柄捕捉到光标
Position 是一个 1x2 向量,给出了 x 和 y 的坐标选定的数据点(如果定义了z 坐标,它将具有第三个值)
DataIndex 是用于绘制线的数组中选定数据点坐标的索引。所以你也可以要求:
>> x(7) %// or "x(cursor_info.DataIndex)" would be the same
ans =
7.3593e+05
>> y(7)
ans =
11.3200
现在默认情况下,控制台中的值显示仅限于几位数字,但变量中的数字具有更高的精度。 2种显示更精确的方法:
第一种方法是在控制台中输入format long。之后,您在控制台中的所有数字输出都将是 15 位数字:
>> cursor_info.Position
ans =
1.0e+05 *
7.359289702215524 0.000106353183026
第二种方法是通过使用格式说明符和sprintf 或fprintf 来强制达到您想要的精度:
>> fprintf('x=%15.15d y=%g \n',cursor_info.Position)
x=7.359289702215524e+05 y=10.6353
2) 以编程方式导出
除了手动导出 cursor_info 数据之外,您还可以使用代码调用它:
dcm = datacursormode(gcf) ;
cursor_info = dcm.getCursorInfo ;
然后,您将获得与手动导出相同的 cursor_info 变量。显示值的方法与上述相同。
3) 直接显示(以所需的精度)。
您还可以完全自定义数据提示将显示的内容,不仅包括位置,还包括一些计算或转换的值。右键单击数据提示并选择Edit text update function。这将打开一个编辑器窗口,其中包含数据提示的当前代码,它基本上查询数据提示位置并创建要显示的文本元胞数组。根据您的需要修改此功能,然后将其保存在您可以检索的地方。
对于我使用的数据的示例,我以不同的精度显示 x 和 y 坐标,然后基于 2 个值进行计算,我还将 x 坐标转换为日期表示.
function output_txt = myModifiedDatatip(obj,event_obj)
pos = get(event_obj,'Position');
output_txt = {['X: ',num2str(pos(1),12)],... %// default code, only the output precision is changed
['Y: ',num2str(pos(2),8)]};
%// add all the informations you want to calculate and display directly here:
output_txt{end+1} = ['error (y-x): ',sprintf('%16f', pos(2)-pos(1))]; %// difference between x and x
output_txt{end+1} = ['Date: ', datestr(pos(1))]; %// display the date/time
此示例将显示如下所示的数据提示:
之后,在任何后续绘图或图形中,您可以通过右键单击数据提示select text update function,然后指向您之前保存的数据提示函数来重新应用此数据提示格式。