假设我的GUI(使用GUIDE设计)自动升级如下图:
我希望在改进步骤中有圈子或类似的东西:
我们如何在MATLAB R2014b中完成这项工作?
PS。
我使用这样的代码来更新GUI中的图:
plot(handles.plot,Value); %%(In a loop)
Value
正在循环更新。
答案 0 :(得分:1)
如果您想在每个数据点上设置一个圆圈,请执行以下操作:
h = plot(handles.plot,Value,'.-');
set(h,'MarkerSize',20,'MarkerEdgeColor',[0 0 0]);
第二行将设置点的大小和颜色,试验给它们你想要的大小。
如果您想在某些特定数据点上绘制点,请执行以下操作:
plot(handles.plot,Value);
hold on
h = plot(specific_X,specific_Y,'.');
set(h,'MarkerSize',20,'MarkerEdgeColor',[0 0 0]);
其中specific_X和specific_Y是带有要绘制点的数据点的x和y的向量。
答案 1 :(得分:1)
@R。如果你已经知道所希望的观点,Schifini写了一个很好的答案。如果您想要自动,这个答案会很好:
我明白你会迭代地在循环内的数据中添加数据(但实际上你似乎只是在上一个情节中运行......)。如果是这样,你可以这样写:
plot(handles.plot,Value); %%(In a loop)
if (Value(end)-Value(end-1))~=(Value(end-1)-Value(end-2)) %% if the slope is changing
hold on; plot(handles.plot(end-1),Value(end-1), 'ko','Markersize',15);
end
答案 2 :(得分:1)
您可以执行以下操作来检测功能“改进”的点,即衍生物发生变化时的点,并绘制相应位置的点:
clear
close all
clc
%// Generate dummy data
t = 1:10;
y = zeros(size(t));
idx1 = 0 <= t & t <= 2;
y(idx1) = 2*t(idx1);
idx2 = 2 < t & t < 3;
y(idx2) = t(idx2);
idx3 = 3 <= t & t <= 5;
y(idx3) = 4;
idx4 = 5 <= t & t <= 8;
y(idx4) = 2*t(idx4);
idx5 = 8 <= t & t <= 10;
y(idx5) = 8;
%======
%// Get indices corrsponding to change in curve
CircleIndices = t(diff(diff(y)) ~= 0) +1
%// Get y-coordinates
yC = y(CircleIndices)
%// plot the curve + the circles
plot(t,y,'r')
hold on
scatter(CircleIndices,yC,40,'k','filled')
hold off
看起来像这样:
在你的循环/回调中很容易实现。希望有所帮助!