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

13 ビュー (過去 30 日間)
Rakshith Badarinath
Rakshith Badarinath 2021 年 4 月 10 日
回答済み: Monisha Nalluru 2021 年 4 月 16 日
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?

回答 (1 件)

Monisha Nalluru
Monisha Nalluru 2021 年 4 月 16 日
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

カテゴリ

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

製品


リリース

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by