フィルターのクリア

Obtain data points from plot using 'buttondownfcn' nested functions

25 ビュー (過去 30 日間)
Andres Elzaurdia
Andres Elzaurdia 2020 年 7 月 1 日
コメント済み: Ahmed 2023 年 6 月 7 日
function [Xsig,Ysig] = GetPoint(Figure)
set(Figure,'ButtonDownFcn', @ExtractPoint) ;
function ExtractPoint(ClickedPoint,~)
waitforbuttonpress ;
Xsig = get(ClickedPoint,'XData') ;
Ysig = get(ClickedPoint,'YData') ;
end
end
I have a plot created in 'Figure'. I would like to be able to select a variety of points on the curve and export the coordinates into the workspace. I have seen people use ginput and datacursor mode in other forums but neither of these methods work since I have a 2 subplots.
Any help is appreciated. Thank you!

採用された回答

darova
darova 2020 年 7 月 2 日
Here is an example
function main
x = rand(100,1); % generate random data
y = rand(100,1);
h = plot(x,y,'.r'); % plot data
set([h gcf],'hittest','off') % turn off hittest
set(gca,'buttondownfcn',@func) % assign function to gca
function func(hobj,~)
p = get(hobj,'currentpoint'); % get coordinates of click
d = pdist2([x y],p([1 3])); % find combination of distances
[~,ix] = min(d); % find smallest distance
line(x(ix),y(ix),'linestyle','none','marker','o')
[x(ix),y(ix)]
end
end
  5 件のコメント
darova
darova 2020 年 7 月 7 日
Try to pass data into UserData property
set(gca,'userdata',num2str(p)) % add this line insdie the function
To get data back
get(gca,'userdata')
% get(gca)
Ahmed
Ahmed 2023 年 6 月 7 日
Hello everyone,
I'm also struggling with this. Where should the function (func) be placed in the code view? I have the similar implementation but my click function doesnt seem to be triggered when I click on the plot. I think the reason is becuase it is in another slider function. So I'm not sure now where to place in my click function in the code view.
% Value changed function: FrequencySlider
function FrequencySliderValueChanged(app, event)
value = app.FrequencySlider.Value;
freq=value;
[d,ix]=min(abs(app.freq_vec-freq));
scatter3(app.UIAxes,app.XYZ(:,1)*10000,app.XYZ(:,2)*10000,abs(app.y(:,ix))*10000,[],abs(app.y(:,ix))*10000,'filled','ButtonDownFcn',@click)
view(app.UIAxes, [0 90]);
c = colorbar(app.UIAxes)
colormap(app.UIAxes, jet)
axis(app.UIAxes, 'tight')
axis(app.UIAxes, 'equal')
app.EditField.Value=value;
function click(~,eventData)
coords = eventData.IntersectionPoint;
app.ZEditField.Value=coords;
end
end

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSubplots についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by