不断更新GUI绘图

时间:2017-09-28 10:29:01

标签: matlab-guide

我正在准备一个gui,其中图的可见性由两个不同轴上的复选框选择控制。此外,用户应从弹出菜单中选择Y向量。代码工作正常(它可能更优雅)但我有自动刷新绘图的问题。目前,如果我绘制并随后从弹出菜单中选择不同的Y值,我必须取消选中并重新检查勾选标记以便在绘图中进行更改。如果选中(选中标记),如何使GUI自动刷新绘图。非常感谢任何帮助:

这是我的代码:

      % --- Executes on pushbutton1.
  function pushbutton1_Callback(hObject, eventdata, handles)
  X=[1 2 3 4]
  Y1=[10 20 30 40]
  Y2=[-1 -2 -3 -4]
  handles.X=X;
  handles.Y1=Y1;
  handles.Y2=Y2;
  guidata(gcbo, handles);
  UnitFcn(handles)



  % --- checkbox function on/off
  function C = OnOffStr(D)
  OffOn = {'off', 'on'};
  L     = (D ~= 0) + 1;  % 0/FALSE => 1, anything else => 2
  if length(L) == 1
    C = OffOn{L};   % Reply a string
  else
    C = OffOn(L);   % Reply a cell string
  end



  function UnitFcn(handles)
  Y1=handles.Y1;

  for p = 1:numel(plotdata)

      Unit = get(handles.popupmenu1,'Value');
      if (Unit==1)
      Y(:,p)=Y1(:,p);

      elseif (Unit==2)%
      Y(:,p)=Y1(:,p)*100;

      end         
  end

  handles.Y=Y;
  guidata(gcbo, handles);
  PlotFcn(handles)



  function PlotFcn(handles)
  X=handles.X;
  Y=handles.Y;
  Z=handles.Y2;

  %Plot in Axes 1
  set(handles.axes1, 'NextPlot', 'add');
      handles.plot1 = plot(X,Y,'visible','off','LineWidth',2, ...
                              'color', [0 0 0],'linestyle', '--', 'parent', handles.axes1);    

  %Plot in Axes 2
  set(handles.axes2, 'NextPlot', 'add');    
      handles.plot2 = plot(X,Y2,'visible','off','LineWidth',2, ...
                              'color', [0 0 0],'linestyle', '--', 'parent', handles.axes2);

  guidata(gcbo, handles);



  % --- Executes on button press in checkbox1.
  function checkbox1_Callback(hObject, eventdata, handles)
  set(handles.plot1, 'Visible', OnOffStr(get(hObject,'Value')));


  % --- Executes on button press in checkbox1.
  function checkbox1_Callback(hObject, eventdata, handles)
  set(handles.plot2, 'Visible', OnOffStr(get(hObject,'Value')));



  % --- Specify unit in popupmenu1.
  function popupmenu1_Callback(hObject, eventdata, handles)
  UnitFcn(handles)

  function popupmenu1_CreateFcn(hObject, eventdata, handles)
  if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
      set(hObject,'BackgroundColor','white');
  end  

这是一个简化的代码,“for p = 1:numel(plotdata)”是指我有~30个不同图的矩阵。

1 个答案:

答案 0 :(得分:0)

如果我在PlotFcn中包含此代码,我可以解决它:

for i=1:1:numel(X(1,:))
Checked(i,1) = get(handles.(sprintf('checkbox%d',i)),'value');
if (Checked(i,1)==1)
    set(handles.plot(i), 'Visible', 'on')
    set(handles.plot(i), 'Visible', 'on')
end
end

但我不确定这是最好的解决方案?使用此代码运行30个绘图需要一些时间。