Wait for user input to select region of data from plot and save it to a variable

30 views (last 30 days)
I have a list of files named sequentially (E.g. "Run1.csv", "Run2.csv", ..... ) that I am reading using "readtable" and plotting the contents using a for loop. I am generating a figure for each file in the for loop.
%% Tidy up workspace
clc; clear; close all;
%% Load raw data
ir_dir = "Path to directory 1\";
ptv_dir = "Path to directory 2\";
% Constants
num_runs = 28; % Number of files
for i=1:num_runs
% create dynamic file path
ir_fname = "Run" + num2str(i) +".dat";
ptv_fname = "Run" + num2str(i) +".csv";
ir_fullpath = ir_dir + ir_fname;
ptv_fullpath = ptv_dir + ptv_fname;
% Read data
tblIR = readtable(ir_fullpath);
tblPTV = readtable(ptv_fullpath);
% plot data
figure(i);
plot(tblIR.Time,tblIR.Data1,'--r','LineWidth',2);
hold on;
plot(tblIR.Time,tblIR.Data2,'-c','LineWidth',1.5);
plot(tblIR.Time,tblIR.Data3,'-m','LineWidth',1.5);
plot(tblPTV.Time,tblPTV.Data4,'-k','LineWidth',2);
plot(tblPTV.Time,tblPTV.Data5,'-b','LineWidth',2);
plot(tblPTV.Time,tblPTV.Data6,'-g','LineWidth',2);
hold off;
grid on;
xlabel('Time (hh:mm:ss.sss)');
ylabel('Temperature (C)');
legend('Data1','Data2','Data3','Data4','Data5','Data6','Location','southeast');
title("Run #" + num2str(i));
% Wait for user input to select data and save it to a variable (data
% brushing?? -- How to automate this?)
% After user has selected data using data brushing and data is saved,
% continue with for loop execution
clear tblIR;
clear tblPTV;
end
Here is an example of output plot that I get after each iteration of for loop:
After the plot is generated, I want the for loop to pause for user to select a region of data in the plot. Something like this:
Upon selection of the data using data brush, I want to data to be saved into a variable in the workspace and continue on with next iteration of for loop.
Is it possible to automate this data brushing for each iteration of for loop? Is there a way to invoke data brushing automatically when a figure is generated? and to automatically save the results of data brushing to a variable?

Answers (1)

Monisha Nalluru
Monisha Nalluru on 16 Apr 2021
BrushData is property present on plot handle used to set and get brushed data on a plot
In order to get the brushed data and save to workspace programmatically, here is the following example
figure;
x=0:2*pi;
y=sin(x);
y1=cos(x);
plot(x,y);
hold on;
plot(x,y1);
ax = gca;
for i=1:length(ax.Children) % loops through all the plot in figure
indices = find(ax.Children(i).BrushData); % gives the indices which are brushed
% save the data into required variable
end
Inorder to set brushed data programmatically then you can use the following structure,
ax.Children(i).BrushData = [0 1 1 1 1 1 1]; % pass the indices which wants to brush as 1 and remaining as 0

Categories

Find more on Line Plots in Help Center and File Exchange

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!