How do I display a graph with a calculate function in GUI?
4 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Bastion
il 3 Ago 2011
Commentato: VISHWAS CHAVAN
il 23 Gen 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 Commenti
Arturo Moncada-Torres
il 10 Ago 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
il 23 Gen 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.
Risposta accettata
Arturo Moncada-Torres
il 10 Ago 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 Commenti
Arturo Moncada-Torres
il 11 Ago 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.
Più risposte (2)
Arnaud Miege
il 3 Ago 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
Vedere anche
Categorie
Scopri di più su Matrix Indexing in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!