Plot not appearing in the axes

4 次查看(过去 30 天)
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

采纳的回答

Walter Roberson
Walter Roberson 2019-4-10
编辑:Walter Roberson 2019-4-10
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 个评论
Via
Via 2019-4-10
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 2019-4-10
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.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Line Plots 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by