How to use multiple button function by using 1 excel data?

3 vues (au cours des 30 derniers jours)
Shahirul Ashraf
Shahirul Ashraf le 27 Avr 2022
Commenté : Shahirul Ashraf le 28 Avr 2022
Hi, I want to develope the tool using Matlab GUI in which by using multiple Pushbutton function by using 1 data. The 1st push button should import excel file, the second one plot the graph based on the import excel and last one shows bar graph based on calculation. I didnt get how to link from button plot & bar with the import excel file.The attachment shows the coding & the excel file.

Réponse acceptée

Johannes Hougaard
Johannes Hougaard le 27 Avr 2022
I think you are pretty close from what I can see.
The properties of the app are kept as variables and can be obtained from any callback or function.
I would therefore wait a few lines to set the app.UITable.Data value until you have updated your 'data' variable in the UploadButtonPushed
function UploadButtonPushed(app, event)
[file,path,~]=uigetfile;
app.filename=[path file];
data=readtable(file);
% app.UITable.Data=data;
app.UITable.ColumnName = data.Properties.VariableNames;
data.Properties.VariableNames{1}='Load mass';
data.Properties.VariableNames{2}='RBB';
data.Properties.VariableNames{3}='LBB';
data.Properties.VariableNames{4}='RES';
data.Properties.VariableNames{5}='LES';
app.UITable.Data=data; % Save data in app after setting variable names
% Not used in this function - could be removed from here to 'end'
x = table2array(data(:,"Load mass"));
y = table2array(data(:,"RBB"));
y2=table2array(data(:,"LBB"));
y3=table2array(data(:,"RES"));
y4=table2array(data(:,"LES"));
R = rmmissing(x);
R1 = rmmissing(y);
R2 = rmmissing(y2);
R3 = rmmissing(y3);
R4 = rmmissing(y4);
end
And then I'd refrain from loading data again in the other callbacks by reusing the data from the table
function PlotButtonPushed(app, event)
data=app.UITable.Data;
x = table2array(data(:,"Load mass"));
y = table2array(data(:,"RBB"));
y2=table2array(data(:,"LBB"));
y3=table2array(data(:,"RES"));
y4=table2array(data(:,"LES"));
plot(app.UIAxes,x,y,x,y2,x,y3,x,y4);
title(app.UIAxes, 'Load Mass vs ALL')
xlabel(app.UIAxes, 'Load Mass')
ylabel(app.UIAxes, 'All')
legend(app.UIAxes,'RBB','LBB','RES','LES');
end
And similarly the MPButtonPushed as (unless you define x, y, R etc. as public properties and access them by app.x rather than x, which would be slightly more efficient)
function MPButtonPushed(app, event)
data=app.UITable.Data;
x = table2array(data(:,"Load mass"));
y = table2array(data(:,"RBB"));
y2=table2array(data(:,"LBB"));
y3=table2array(data(:,"RES"));
y4=table2array(data(:,"LES"));
R = rmmissing(x);
R1 = rmmissing(y);
R2 = rmmissing(y2);
R3 = rmmissing(y3);
R4 = rmmissing(y4);
themean=mean(R);
themean1= mean(R1);
themean2= mean(R2);
themean3= mean(R3);
themean4= mean(R4);
m = sum((x - themean).*(y- themean1));
p = sum((x - themean).*(x - themean));
l1 = m/p;
%%LBB MP
m2 = sum((x - themean).*(y2 - themean2));
l2 = m2/p;
%%RES MP
m3 = sum((x - themean).*(y3 - themean3));
l3 = m3/p;
%%LES MP
m4 = sum((x - themean).*(y4 - themean4));
l4 = m4/p;
c = categorical({'RBB','LBB','RES','LES'});
title(app.UIAxes, 'MP')
xlabel(app.UIAxes, 'Type')
ylabel(app.UIAxes, 'Cycle')
bar(app.UIAxes, c, [l1;l2;l3;l4],'LineWidth',0.4);
end
You could make several minor optimisations e.g. by adding a filter to your uigetfile and by adding a StartUpFcn to disable the Plot and MP buttons until you have loaded data, but that's just bells and whistles - I think the above code will implement your minimum requirements
  1 commentaire
Shahirul Ashraf
Shahirul Ashraf le 28 Avr 2022
thank you so much. it answer my question very well.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Develop Apps Using App Designer dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by