title: MATLAB set('XData'....)
body: <p>I'm having a problem updating my plot. Basically, I have a function that creates a figure with 3 subplots. Then I have another function that runs the create figure function and then updates the plot. It's important to just update so I don't create a new graph each loop since it's 3d data and takes a while to load.</p>
  
  <p>The problem lies in my second subplot. I load 3 images (3 slices) using slice() and then also want to plot a position vector. I set my position vector to (0,0,0) initially, then I thought I could just update it in my loop by setting the 'XData', 'YData'... to their respective values. For some reason it's not working and is spitting the error "Undefined function 'XData' for input arguments
  of type 'double'." Please help, below is the code, thanks!!!</p>
  
  <p>NOTE--- The error lies in the update plot function after "%refresh plot"</p>
  
  <p>Initial Plot</p>
  
  <pre><code>function [Fig] = EndoSliceViewer_createFigure(Figindex,DICOMparam)
  %This function creates and returns a Figure object to visualizes DICOM data
  %in the plane orthogonal to the endoscopic view, the RGB view of the camera
  %and the orientation of the navigation
  
  %set resolution for Endo Slice Plot
  Fig.resolEndoSlice=300; 
  Fig.resolEndoRGB=[720 1280]; 
  Fig.resolEndoNavi=[500 500 500]; 
  
  %init figure on screen
  Fig.fig=figure(Figindex); gcf;
  set(Fig.fig,'Position',[50 500 1500 500],'Name','Endo Slice Viewer');
  %set(Fig.fig,'KeyPressFcn','global kpressed; global Fig; kpressed = get(Fig.fig,''CurrentChar'');');
  
  Fig.sub1=subplot(1,3,1);
  Fig.sub1im=image(uint8(zeros(Fig.resolEndoRGB(1), Fig.resolEndoRGB(2),3)));
  title('Endo Camera View');
  daspect([1 1 1]);
  
  Fig.sub2=subplot(1,3,2);
  Fig.sub2im=plot3(0,0,0);
  h=slice(DICOMparam.Vd,DICOMparam.Cx,DICOMparam.Cy,DICOMparam.Cz);
  colormap bone;
  set(h,'FaceColor','interp',...
      'EdgeColor','none',...
      'DiffuseStrength',.8)
  title('Navigation View');
  xlim([-0.2*Fig.resolEndoNavi(1),  1.2*Fig.resolEndoNavi(1)]);
  ylim([-0.2*Fig.resolEndoNavi(2),  1.2*Fig.resolEndoNavi(2)]);
  zlim([-0.2*Fig.resolEndoNavi(3),  1.2*Fig.resolEndoNavi(3)]);
  xlabel('X [vox]');
  ylabel('Y [vox]');
  zlabel('Z [vox]');
  daspect([1 1 1]);
  
  Fig.sub3=subplot(1,3,3);
  Fig.sub3im=imagesc(zeros(Fig.resolEndoSlice, Fig.resolEndoSlice));
  title('Endo Slice View');
  xlim([0 Fig.resolEndoSlice]);
  ylim([0 Fig.resolEndoSlice]);
  xlabel('Xendo [vox]');
  ylabel('Yendo [vox]');
  daspect([1 1 1]);
  colormap bone
  drawnow;
  
  %potentially: add subplot for navigation position display later
  end
  </code></pre>
  
  <p>Update Plot</p>
  
  <pre><code>function [  ] = EndoSliceViewerJP( Naviparam,  DICOMparam)
  %RGBparam should be included later - add +1 to nargin values 
  
  %visualizes: 
  %1st: RGB camera Live view 
  %2nd: Orientation and Position of Navigation System
  %3rd: DICOM Slice relative to navigated Endoscope in a and its orientation
  %in a Slice perpendicular to the endoscope
  %assumes Navigation system running with referenced tool (Naviparam.tool=4 or Naviparam.tool=5)
  
  %currently this plots slices according to Endoscope position, could add
  %vector in plot that shows orientation of the scope...
  disp('Endo Slice Viewer');
  disp('" ": exit on space key');
  global kpressed;
  kpressed = 0;
  
  global Fig
  Fig=EndoSliceViewer_createFigure(1,DICOMparam);
  set(Fig.fig,'KeyPressFcn','global kpressed; global Fig; kpressed = get(Fig.fig,''CurrentChar'');');
  
  %create matrices and filter for smoothing of Endo Slice Data
  xrel=-(ones(Fig.resolEndoSlice,1)*(1:Fig.resolEndoSlice)-Fig.resolEndoSlice/2)';
  yrel=-(ones(Fig.resolEndoSlice,1)*(1:Fig.resolEndoSlice)-Fig.resolEndoSlice/2);
  SLimage=zeros(Fig.resolEndoSlice,Fig.resolEndoSlice);
  PosVec=zeros(Fig.resolEndoSlice,Fig.resolEndoSlice,3);
  gfilt = fspecial('gaussian',5,1.5);
  depth = 50;
  
  
  exitflag = 0;
  while (exitflag == 0)
       %check on keyboard input
       if kpressed ~= 0
          switch kpressed
              case 'r'
                  depth=depth+2
              case 'f'
                  depth=depth-2
              case ' '
                  exitflag = 1;
                  disp('**** Exit Endo Slice Viewer ****')
  
          end
          kpressed = 0;
       end
  
  if (nargin&gt;=1) %Naviparam is passed - update Navigation View
       %capture new navigation data
       Naviparam=Navi_acquire(Naviparam);
       Naviparam=Navi_calc_data(Naviparam);
  
       %refreshN avigation View
       %NOT YET IMPLEMENTED: UPDATE NAVIGATION PLOT 
  
       if (nargin==2) %DICOMparam is also passed - update EndoSlice View
           EndoVecX=inv(DICOMparam.calib.navi2dicom(1:3,1:3))*inv(Naviparam.data.Endo_RefHomMat(1:3,1:3))*[1;0;0];
           EndoVecY=inv(DICOMparam.calib.navi2dicom(1:3,1:3))*inv(Naviparam.data.Endo_RefHomMat(1:3,1:3))*[0;1;0];
           EndoVecZ=inv(DICOMparam.calib.navi2dicom(1:3,1:3))*inv(Naviparam.data.Endo_RefHomMat(1:3,1:3))*[0;0;-1];
           disp(Naviparam.data.Endo_RefHomMat(1:3,1:3));
           EndoVecX=EndoVecX/norm(EndoVecX);
           EndoVecY=EndoVecY/norm(EndoVecY);
           EndoVecZ=EndoVecZ/norm(EndoVecZ);
           mask=ones(Fig.resolEndoSlice,Fig.resolEndoSlice);
           S=[DICOMparam.Sx; DICOMparam.Sy; DICOMparam.Sz];
  
           DICOMPos = DICOMparam.calib.navi2dicom*[Naviparam.data.Endo_RefOffsetPosVec;1];
  
           for i=1:3
               %Point on Plane defined by Endo Position plus distance*Viewing direction vector
               PosVec(:,:,i)=(DICOMPos(i)+depth*EndoVecZ(i))+xrel*EndoVecX(i)+yrel*EndoVecY(i);
               %limit positions to integer values inside DICOM data cube
               PosVec(:,:,i)=round(PosVec(:,:,i));
               PosVec(:,:,i)=min(max(PosVec(:,:,i),1),S(i));
               %create mask to set Points outside the data cube to 0
               mask=double(PosVec(:,:,i)&gt;1).*double(PosVec(:,:,i)&lt;S(i).*mask(:,:));
           end
           %access data cube via indexed labelling
           XposTemp=PosVec(:,:,1); YposTemp=PosVec(:,:,2); ZposTemp=PosVec(:,:,3);
           indexTemp=sub2ind(size(DICOMparam.Vd), XposTemp(:), YposTemp(:),ZposTemp(:));
           SLimage(:)=DICOMparam.Vd(indexTemp(:));
  
           SLimage=SLimage.*mask;
           SLimage=imfilter(SLimage,gfilt);
  
           %refresh plot
           set(Fig.sub3im, 'cdata', SLimage);
       axes(Fig.sub2);
       set(lineseries, 'XData', DICOMPos(1), 'YData', DICOMPos(2), 'ZData', DICOMPos(3));
       set(lineseries, 'Marker', '*', 'Color', 'b');
       disp(DICOMPos);
       end
  end
  
  %RGBparam is always passed - update RGB camera View
  %capture new RGB data
  %handles.RGBparam=RGB_acquire(handles.RGBparam);
  %refresh RGB camera View
  %set(Fig.sub1im, 'CData', imresize(handles.RGBparam.image,[Fig.resolEndoRGB(1) Fig.resolEndoRGB(2)]));  
  
  
  drawnow;
  end
  
  close(Fig.fig);
  clear global;
  
  
  end
  </code></pre>