Issue with Plotting Data set based on Checkboxes in MATLAB App Designer

5 ビュー (過去 30 日間)
Andrew Feenan
Andrew Feenan 2022 年 6 月 14 日
コメント済み: Voss 2022 年 6 月 15 日
Hi,
I have an Excel file with data on a large number of devices. Each device has its own sheet within the Excel file.
I have a uitable with checkboxes setup in app designer so that when a check box is selected the data corresponding to that selection will be displayed on the plot. I need to be able to select more than one device at a time and all selected devices should appear on the plot.
When the user makes their selection by using the checkboxes in the uitable they then click a plot button, and their selected devices should be plotted. There is a clear button to clear the plot and the user should be able to repeat the process.
This is my code so far
%create the uitable, first column has the device names,
%second colunm has checkboxes
boxColumn = false(size(app.SheetName));
app.T = table(app.SheetName, boxColumn);
app.UITable.Data = app.T;
%callback to keep track of which checkboxes are selected
function UITableCellEdit(app, event)
indices = event.Indices;
newData = event.NewData;
if newData
app.SelectedDevices(end+1) = table2array(app.UITable.Data(indices(1),indices(2)-1));
else
app.SelectedDevices(ismember(app.SelectedDevices,app.UITable.Data(indices(1),indices(2)-1))) = [];
end
end
%selected devices plotted when button is pushed
function PlotButtonPushed(app, event)
probplot(app.UIAxes,app.Data(:,app.Data(app.SelectedDevices)));
legend(app.UIAxes,Sheetname,'-DynamicLegend','Location','best')
end
end
It is the last bit of code that I am having issues with. The error I'm getting is on the probplot line "Array indices must be positive integers or logical values."
I'd appreciate any help on this issue.
Andrew
  3 件のコメント
Andrew Feenan
Andrew Feenan 2022 年 6 月 14 日
It’s the imported sheet with the data of each device in it
Andrew Feenan
Andrew Feenan 2022 年 6 月 14 日
This is the code
app.SheetName = sheetnames(app.filename1);
app.nSheets = length(app.SheetName);
%range of chosen data
range = 'D2:D501';
data = zeros(1,7);
for i = 1 : app.nSheets
Name = app.SheetName{i};
data = readtable(app.filename1,'Sheet',Name,'Range',range);
data1 = table2array(data);
app.Data(:,i) = data1;
end

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

採用された回答

Voss
Voss 2022 年 6 月 14 日
I guess I would get the data to plot based on the selected checkboxes in app.UITable directly, without using app.SelectedDevices
probplot(app.UIAxes,app.Data(:,app.UITable.Data{:,2}));
and then, unless you need it for something else, you can do away with app.SelectedDevices (and therefore UITableCellEdit) entirely.
  8 件のコメント
Andrew Feenan
Andrew Feenan 2022 年 6 月 15 日
This worked perfectly. Thank you!
I wouldn’t have thought to read the lines from the plot
Thank you for your help
Voss
Voss 2022 年 6 月 15 日
You're welcome!

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeDevelop Apps Using App Designer についてさらに検索

製品


リリース

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by