我想制作一个小脚本,我可以系统地分析很多matlab图。使用该脚本,我应该可以单击图中的某些点,然后脚本会存储这些值。我现在有回调函数有坐标,但我想在主文件中存储这些值。但是set函数无法从函数接收值。如何创建另一种结构以避免这种情况? [x,y] = set(f,'ButtonDownFcn',{@ Click_CallBack a});不能不幸......
function process_plot()
dataset_dia = input('diameter?')
dataset_length = input('length?')
h = gcf;
a = gca;
f =get(gca,'Children');
set(h, 'Pointer', 'fullcrosshair');
set(f,'ButtonDownFcn',{@Click_CallBack a});
save(strcat(dataset_dia, '.mat'), x, y);
end
从图中提取坐标的函数:
function [x, y]= Click_CallBack(h,e,a)
point = get(a,'CurrentPoint'); x = point(1);
y = point(4);
fprintf(1,'X,Y = %.2f,%.2f\n',x,y);
end
答案 0 :(得分:0)
您可以执行以下操作。左键单击以存储用户数据中的点,然后在选择将其写入MAT文件时右键单击。
function process_plot()
f =get(gca,'Children');
set(gcf, 'Pointer', 'fullcrosshair');
set(f,'ButtonDownFcn',{@Click_CallBack gca});
function [x, y]= Click_CallBack(h,e,a)
userData = get(a,'userData'); %Store x,y in axis userData
switch get(ancestor(a,'figure'),'SelectionType')
case 'normal' %left click
point = get(a,'CurrentPoint');
userData(end+1,:) = [point(1,1) point(1,2)];
set(a,'userData',userData)
fprintf(1,'X,Y = %.2f,%.2f\n',point(1,1),point(1,2));
otherwise %alternate click
% Reset figure pointer
set(ancestor(a,'figure'), 'Pointer','arrow');
%Clear button down fcn to prevent errors later
set(get(gca,'Children'),'ButtonDownFcn',[]);
%Wipe out userData
set(a,'userData',[]);
x = userData(:,1);
y = userData(:,2);
save('myMatFile', 'x', 'y'); %Save to MAT file ... replace name
end
当然,如果您没有将轴用户数据用于其他内容。另请注意,按下按钮期间检索到的当前点实际上不会出现在绘制的数据集中。它只是游标当前在绘制线条上的位置。如果您想要绘制线条中的实际点,则必须在数据中搜索与检索到的光标位置最近的点。