Extract brushed data programmatically

62 次查看(过去 30 天)
Hi everyone smarter than me, (Upfront--> Can I get some Matlab Engineer/Guru eyes on this ?)
I'm looking to extract exactly WHICH data points have been brushed by the user in a scatter plot.
Clearly this is tracked somewhere, because if you right click the plot you can
  1. Export the brushed data to a variable
  2. Delete brushed/unbrushed points
  3. Copy to the command line
How can I get that list of brushed data programmatically?
My ultimate goal is to brush a linked set of scatter plots, but but a first step is to just select a collection of points, and get a logical selection out again.
I'd like to hook into the pre-built work Matlab engineers have done, rather than home brew a janky and slow version.
Does anyone know where Matlab keeps this secret sauce?
------------------------------
Here's what I've tried so far
My best guess starting point is using the struct() function to display hidden internal properties of the brush object.
However, despite the new field "ModeHandle", I can't find what I'm after once I've done that.
-------------------------
Example of my flow:
% make a scatter plot
x = 0.1:0.1:100;
y = sin(x)./x;
scatter(x,y);
b = brush; % make the brush object
b.Enable = 'on' % enable brushing
Off I go to brush (see photo above)
Now expose the hidden brush object
b2 = struct(b); % Make brush object show all hidden properties
ModeHandle field appears, but I can't seem to find where the brushed points/ properies are.
I've delved deep into ModeHandle, with no luck.
Any help navigating the ModeHandle field would be appreciated.
  2 个评论
Allen
Allen 2023-5-18
It looks like this topic has already been covered. See @Yair Altman's answer to the linked post.
I am also including the link he proivded to his Undocumented Matlab webpage.
Scott Smith
Scott Smith 2023-5-18
Awesome! Thanks so much! This and the accepted answer have been a big help!

请先登录,再进行评论。

采纳的回答

Adam Danz
Adam Danz 2023-5-18
To get the coordinates of selected data points, you can follow the example in this answer.
That answer shows that BrushData is a property of the object that has been brushed and contains a logical index of the data points that were selected. You can use this logical index to extract the coordinates from the XData, YData, ZData properties (for most graphics objects).
  1 个评论
Scott Smith
Scott Smith 2023-5-18
So helpful. I wish that this was easier to find out/ that "BrushedData" wasn't a hidden property.
Thanks!

请先登录,再进行评论。

更多回答(1 个)

Scott Smith
Scott Smith 2023-5-18
Also as the original poster,
This does in fact work for scatter plots and (I imagine) linked scatter plots where simultaneous brushing is being exceuted properly.
quick example code
x = 0:0.1:100;
y = sin(x)./x;
s = scatter(x,y);
brush on
Then just brush desired data
Finally to get a logical/index of the brushed data
BData = get(s,'BrushData');

类别

Help CenterFile Exchange 中查找有关 Graphics Object Programming 的更多信息

标签

产品


版本

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by