Plot not appearing in the axes

11 views (last 30 days)
Via
Via on 10 Apr 2019
Commented: Walter Roberson on 10 Apr 2019
I have this code for the callback of my button which is tasked to solve and graph. But when I try it, the plot doesn't appear in the axes. What did I do wrong?
Here's the code:
function button_Callback(hObject, eventdata, handles)
global Yo K r t Y T Y2
% hObject handle to button (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of button
Yo= str2double(get(handles.value_Yo, 'string'));
K= str2double(get(handles.value_K, 'string'));
r= str2double(get(handles.value_r, 'string'));
t= str2double(get(handles.value_t, 'string'));
Y= (K*Yo)/((K-Yo)*exp(-r*t)+Yo);
set(handles.ans, 'string', Y);
for T= 0:0.5:t;
Y= (K*Yo)/((K-Yo)*exp(-r*T)+Yo);
set(handles.axes1);
plot(T,repmat(Y,1,numel(T)),'o');
xlabel ('t(time)');
ylabel ('Y(population)')
end

Accepted Answer

Walter Roberson
Walter Roberson on 10 Apr 2019
Edited: Walter Roberson on 10 Apr 2019
The call
set(handles.axes1);
fetches the list of public properties that are available to be set for handles.axes1. The list of properties is then discarded because they are not assigned to anything and because you have a semi-colon at the end of the line to supress output.
In particular, the call does not make that axes the "active" axes, so the following plot() call will go to whichever axes happens to have last been activated.
Also, you do not have a "hold on", so every plot() call is erasing the previous plot.
  4 Comments
Via
Via on 10 Apr 2019
this is my current code now, and the graph already appeared but in circular points
for T= 0:0.5:50
Y= (K*Yo)/((K-Yo)*exp(-r*T)+Yo);
set(handles.axes1)
plot(T,repmat(Y,1,numel(T)),'-o');
hold on;
xlabel ('t(time)');
ylabel ('Y(population)')
end
but if I use
plot(T,repmat(Y,1,numel(T)),'-');
to change the circle marker into a line, the graph doesn't appear
Walter Roberson
Walter Roberson on 10 Apr 2019
Each time you call plot, it creates a new line() object that does not connect to any previous line objects (unless you matched the coordinates), including not automatically joining up to any coordinates you had plot() before. Furthermore, each line() object will only draw a visible line provided that it has at least two consecutive finite (and non-nan) coordinates. You are only plotting with single X coordinates (because T is a scalar inside the loop) so you cannot get lines.
You need to give up on getting lines as long as you are plotting one point at a time in a loop.
If you need to draw lines, then you should calculate the Y values and store them in a vector, without plotting them as you create them. Then once you have them all calculated, plot() the vector.
... If you use vectorization then you do not need any loop at all.

Sign in to comment.

More Answers (0)

Categories

Find more on Graphics Object Properties in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!