How do I display a graph with a calculate function in GUI?
4 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Bastion
le 3 Août 2011
Commenté : VISHWAS CHAVAN
le 23 Jan 2017
I'm developing a GUI in MATLAB trying to display a graph of concentration with respect to time.
I have coded a function that will calculate my concentration and I have made a button known as 'Calculate' which display the outcome after I input a few variables.
Now I want to make another button called 'Display' so when I push it, it will generate a plot with concentration to time.
I can't seem to find any info on this, any help would be great.
2 commentaires
Arturo Moncada-Torres
le 10 Août 2011
Bastion 1 day ago
Here is what I have done:
% --- Executes on button press in Button_CALC_C.
function Button_CALC_C_Callback(hObject, eventdata, handles)
A = get(handles.input_A,'String');
B = get(handles.input_B,'String');
X = get(handles.input_X,'String');
T1 = get(handles.input_T1,'String');
T2 = get(handles.input_T2,'String');
sum1 = str2num(A) + str2num(B)*str2num(X) + str2num(T1)^2;
C1 = num2str(sum1);
set(handles.text_C1,'String',C1);
guidata(hObject, handles);
sum2 = str2num(A) + str2num(B)*str2num(X) + str2num(T2)^2;
C2 = num2str(sum2);
set(handles.text_C2,'String',C2);
guidata(hObject, handles);
% --- Executes on button press in Button_Plot_TvC.
function Button_Plot_TvC_Callback(hObject, eventdata, handles)
axes(handles.T_C_Plot);
x = T1:1:T2; % [I WONDER WHY THIS LINE DOESN'T WORK? I WANT TO PLOT THE RANGE BETWEEN T1 AND T2 WITH THE RANGE BETWEEN C1 AND C2 FROM THE CODE IN THE PREVIOUS BUTTON]
y = C1:1:C2; % [I hope someone can help]
plot (x,y);
title('Time vs Concentration');
xlabel('Time');
ylabel('Concentration');
guidata(hObject, handles);
VISHWAS CHAVAN
le 23 Jan 2017
Hello, Give the handle command for every plot command like plot(handles.Tag name of plot,x,y); same for the title and other command give the handle of the plot.
Réponse acceptée
Arturo Moncada-Torres
le 10 Août 2011
I have tried the following code and it works. The problem is that x and y were not the same size. Insert the following code.
% --- Executes on button press in Button_CALC_C.
function Button_CALC_C_Callback(hObject, eventdata, handles)
% Choose default command line output for Plot_One
handles.output = hObject;
%Get user input from GUI
A = str2double(get(handles.input_A,'String'));
B = str2double(get(handles.input_B,'String'));
X = str2double(get(handles.input_X,'String'));
T1 = str2double(get(handles.input_T1,'String'));
T2 = str2double(get(handles.input_T2,'String'));
%Calculate data
sum1 = A + B * X + T1^2;
C1 = num2str(sum1);
set(handles.text_C1,'String',C1);
guidata(hObject, handles);
sum2 = A + B * X + T2^2;
C2 = num2str(sum2);
set(handles.text_C2,'String',C2);
guidata(hObject, handles);
% Update handles structure
guidata(hObject, handles);
% --- Executes on button press in Button_Plot_TvC.
function Button_Plot_TvC_Callback(hObject, eventdata, handles)
% Choose default command line output for Plot_One
handles.output = hObject;
axes(handles.T_C_Plot);
T1 = str2double(get(handles.input_T1,'String'));
T2 = str2double(get(handles.input_T2,'String'));
C1 = str2double(get(handles.text_C1,'String'));
C2 = str2double(get(handles.text_C2,'String'));
%%OPTION 1
% Create a 1D array from T1 to T2 in intervals of 1.
% x = T1:1:T2;
% Here you count the number of elements x has (type "doc numel" without
% the quotes for more information).
% noIntervals = numel(x);
% Create a 1D array from C1 to C2 in intervals of noIntervals.
% y = C1:noIntervals:C2;
%%OPTION 2
% Alternatively, you can do the following:
% Define the number of points you want to plot.
noPoints = 100;
% Create a 1D array from T1 to T2 with the desired number of points.
% Type "doc linspace" (without the quotes) for more information.
x = linspace(T1, T2, noPoints);
% Create a 1D array from C1 to C2 with the desired number of points.
% Type "doc linspace" (without the quotes) for more information.
y = linspace(C1, C2, noPoints);
plot (x,y);
title('Time vs Concentration');
xlabel('Time [s]');
ylabel('Concentration');
% Update handles structure
guidata(hObject, handles);
Choose whatever option you wand (and understand better!). Personally, I would go for Option 2, but you choose. Let me know if it works for you.
2 commentaires
Arturo Moncada-Torres
le 11 Août 2011
I'm glad it worked.
Regarding your other question, post it in a new thread please. This is to keep the forum as neat as possible.
Plus de réponses (2)
Arnaud Miege
le 3 Août 2011
You need to add a set of axes to your GUI and plot the data on the axes. Have a look at GUI with Multiple Axes in the documentation for an example of this (using GUIDE).
HTH,
Arnaud
Voir également
Catégories
En savoir plus sur Matrix Indexing 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!