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
0 个评论
采纳的回答
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 个评论
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 Center 和 File Exchange 中查找有关 Line Plots 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!