在Matlab中使用cursorA=fetch(cursorA,10)获取前10行的数据,如果我变成回忆歌词想取得数据是通过计算得到的某一行

通过MATLAB访问数据库_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
通过MATLAB访问数据库
上传于||文档简介
&&通​过​M​A​T​L​A​B​访​问​数​据​库
大小:1.47KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢股票/基金&
李洋:Matlab数据游标(dualcursor)动态展示
作者:李洋
  实现的内容是当展示量很大的时候,用两个游标,当拖动游标的时候可以动态展示游标所在位置的x,y值,就像某些软件,有一个竖线拖动可以展示竖线所在位置的日期时间和开高低收等指标,原本是想自己实现来着,后来在file exchange上找到这个比较符合我的要求的一个函数,就懒得自己弄了。这个函数还是挺NB的,不但可以动态展示游标所在位置的x,y值,而且可以产生两个游标之间的数据为一个新的图像,方便显示数据的局部。
  这个函数的作用还是挺大的,当你图形的数据展示很多,你想了解某个点,某个邻域的值的情况,用这个函数很是方便。
  测试代码:load handel
  Ns = 2^12;
  Y = fft(y,Ns);
  Y = 2/Ns*abs(Y(1:Ns/2));
  df = Fs/Ns;
  f = (0:1:Ns/2-1)*
  %Plot it
  plot(f,100*[Y sqrt(Y)])
  title('My cursor example');
  xlabel('Frequency (Hz)');
  ylabel('Amplitude');
  axis([0 1200 0 inf]);
  %Turn on cursors
  dualcursor
  dualcursor.m函数代码,要的拿去:function val = dualcursor(state,deltalabelpos,marker_color,datalabelformatfcnh,axh)
  %dualcursor Add dual vertical cursors to a plot
  %Syntax
  % dualcursor
  % dualcursor('state');
  % dualcursor([X1 X2]);
  % dualcursor('state',deltalabelpos);
  % dualcursor([X1 X2],deltalabelpos);
  % dualcursor('update', ...) %Updates existing cursors when data has changed
  % dualcursor(..., ..., marker_color_spec);
  % dualcursor(..., ..., ..., fcnhandle);
  % dualcursor(..., ..., ..., ..., axh);
  % val = dualcursor %return values of the 2 cursors on the current axis
  % val = dualcursor(h) %return values of the 2 cursors on the axis or line w/handle h
  %Description
  % Easy Mode:
  % dualcursor on %Turns on data cursors
  % dualcursor off %Turns off data cursors
  % dualcursor %Toggles the state of data cursors
  % val = dualcursor %Return the coordinates of the 2 cursors
  % val = [x1 y1 x2 y2]
  % Interaction:
  % Click on the cursors to drag them around.
  % Click on the cursor label to reposition.
  % If multiple lines are plotted, click on a line to make it active.
  % Right click on a cursor to:
  % - Export the selected region to the workspace
  % (exports as a structure named cursors)
  % - Export the selected region to a new figure
  % - Export cursor data to workspace
  % (exports as a variable named cursordata = [x1 y1 x2 y2])
  % - Remove the cursors from the plot
  % Click on the delta calculation labels to reposition them.
  % Advanced Options:
  % 1. Specify initial x-coordinates for the cursors
  % dualcursor([x1 x2]); %Adds cursors at x1, x2
  % 2. Specify the location of the text label for displaying x2-x1, y2-y1 results
  % dualcursor([],deltalabelpos); %Specifies the location to display DeltaX
  % %and DeltaY calculations
  % deltalabelpos = [DeltaX_x, DeltaX_y; DeltaY_x, DeltaY_y] in normalized axis units
  % default = [.65 -.08;.9 -.08] puts them just below the lower right-hand corner.
  % If this is too hard, you can also reposition the labels with your mouse!
  % 3. Specifying the color and marker for the cursors
  % dualcursor([],[],marker_color_spec);
  % %Turns on data cursor, using specified marker and color
  % %marker_color_spec is a one or two element string, specifying color and/or marker
  % %style. &&help plot for valid marker and color specifiers
  % ex 'go' - red circles
  % 's' - squares, with default color (red)
  % 4. Update the existing cursors when the data in the plot has changed.
  % dualcursor('update');
  % This mode is useful when using the cursors on a live data stream.
  % This simply updates the appropriate values to reflect the latest data. Here's
  % how to do this:
  % - When you initialize the graphics before taking data, make your initial call
  % to dualcursor (dualcursor on, for instance)
  % - In the code that updates the graphics display with new data, call
  % dualcursor update
  % 5. Specify custom formatting for the data label showing individual cursor values
  % This is implemented with a function handle (@). You provide a handle to a
  % specifically formatted function:
  % dualcursor(..., ..., ..., fcnhandle)
  % %Specifies the text and formatting for the data label
  % %fcnhandle is a handle to the function that defines the formatting. This function
  % %must have the following argument syntax:
  % function textstring = mytextstring(xv,yv);
  % Input:
  % xv (scalar) The x cursor value
  % yv (scalar) The y cursor value
  % Output:
  % textstring (string) The formatted text string
  % {'string'} Cell array of strings for multi-line display
  % Example
  % Create the following function. save as frequencystring.m
  % function textstring = frequencystring(xv,yv);
  % textstring = {['Amp: ' num2str(yv,'%2g') ' dB']
  % ['f: ' num2str(xv,'%2g') ' Hz'];};
  % %Use this code when you are ready to call dualcursor
  % fcnhandle = @ %Create handle to your function
  % dualcursor(..., ..., ..., fcnhandle)
  % 6. Add cursors to a specific axis (not necessarily current axis).
  % dualcursor(..., ..., ..., ..., axh);
  % Adds the cursors to the axis with handle axh
  % This mode is useful when axis handles might be hidden
  % Example
  % %Set up some interesting data
  % load handel
  % Ns = 2^12;
  % Y = fft(y,Ns);
  % Y = 2/Ns*abs(Y(1:Ns/2));
  % df = Fs/Ns;
  % f = (0:1:Ns/2-1)*
  % %Plot it
  % plot(f,100*[Y sqrt(Y)])
  % title('My cursor example');
  % xlabel('Frequency (Hz)');
  % ylabel('Amplitude');
  % axis([0 1200 0 inf]);
  % %Turn on cursors
  % dualcursor
  % %Turn off cursors
  % dualcursor off
  % %Place cursors at x=300 and x=400, place DeltaX/DeltaY display in the upper left
  % % hand corner, and use a green square for the cursor.
  % dualcursor([300 400],[.05 1.05; .25 1.05],'gs');
  % %Move the cursors around. Try moving the data label, too
  % %Now, wasn't that fun? Finally, get the current cursor positions
  % val =
  % %val = [x1 y1 x2 y2]
  % NOTE: HandleVisibility of axis must be set to 'on' or 'callback'
  % see also: DATALABEL, LINELABEL
  % This function is provided as an example only. It has not been
  % tested, and therefore, it is not officially supported by The
  % MathWorks, Inc.
  % Written by Scott Hirsch
  % Copyright
The MathWorks, Inc.
  % This is a (major) modfication of datalabel, available at MATLAB Central
  %Parse input arguments
  %If output argument, return the cursor values
  %See if the user specified a formatting function for the datalabel
  if nargin&4 || isempty(datalabelformatfcnh) %Nope. Use the default one included here.
  datalabelformatfcnh = @local_
  if nargout
  if nargin==0 %Use current axis
  if strcmp(get(h,'Type'),'line');
  h = get(h,'Parent');
  cursors = findobj(h,'Tag','Cursor');
  if length(cursors)==2 %Should be empty (no cursors), or length=2
  for ii=1:2
  cn = getappdata(cursors(ii),'CursorNumber');
  ind = (cn-1)*2+1:cn*2; %Index into val
  val(ind) = getappdata(cursors(ii),'Coordinates');
  val = [];
  warning('I could not find any cursors');
  return
  elseif nargin&5 || isempty(axh) %Did the user specify a handle?
  %If no input arguments, switch state (turn off/on)
  if (nargin==0 & nargout==0) | isempty(state) %Switch state. Check current state
  dots = findobj(axh,'Type','line','Tag','Cursor'); %See if there are any cursors
  if isempty(dots) %None found. Turn cursors on
  state = 'on';
  state = 'off';
  %Check if the first argument is numeric. The user is specifying
  % the initial x-coordinates of the markers
  if nargin&=1 & isnumeric(state) %First input is x coordinates of markers
  x_init = state(:);
  %error check
  if length(x_init)~=2
  error('First input must be 2 element vector of x coordinates');
  state = 'on'; %Turn on data cursors.
  else %Default position = 1/3, 2/3 x axis limits
  % xl = %X Limits. this is the letter L, not the number 1
  if strcmp(get(axh,'Type'),'figure') || strcmp(get(axh,'Type'),'uipanel') || strcmp(get(axh,'Type'),'root'); %user clicke do nothing
  return
  xl = xlim(axh);
  lim = localObjbounds(axh); % Problem using objbounds with hggroup objects, so I have a simple version of my own
  lim = lim(1:2); %x values only
  xl(isinf(xl)) = lim(isinf(xl));
  width = diff(xl); %Axis width
  x_init = xl(1)+[1/3 2/3]*
  % Get handle to figure just once
  hFig = ancestor(axh,'figure');
  switch state
  case 'on'
  %Initialization
  % Set the WindowButtonDownFcn
  % Add the cursors.
  %If there are already some data cursors on this plot, delete them!
  dualcursor('off',[],[],[],axh);
  %Parse user inputs
  %Check for user input of position for delta labels
  if nargin&2 | isempty(deltalabelpos)
  deltalabelpos = [.65 -.08;.9 -.08]; %Use defaults
  %[x1 y1; x2 y2]
  %Marker and color specification
  if nargin &= 3 ,
  %Parse marker string. User might specify color, marker, or both
  colors = 'bgrcmyk';
  markers = '+o*.xsdv^&<PH';
  for ii=1:length(marker_color)
  col_ind = strfind(colors,marker_color(ii));
  if ~isempty(col_ind) %It's a color
  color = marker_color(ii);
  else %Try a marker instead
  mark_ind = strfind(markers,marker_color(ii));
  if ~isempty(mark_ind)
  marker = marker_color(ii);
  %Handle default marker and color
  if ~exist('color','var'), color = 'r'; %set default
  if ~exist('marker','var'), marker = '*'; %set default
  %Add the cursors.
  %Ideally, the user specified the 2 x coordinates.
  %If not, just put the cursors somewhere nice.
  lineh = local_findlines(axh);
  %Line data
  if isempty(lineh)
  x1 = 0;
  y1 = 0;
  % erasemode = 'normal'; %default
  %if multiple lines, define callback to allow for selection
  set(lineh,'ButtonDownFcn', ...
  'setappdata(get(gco,''Parent''),''SelectedLine'',gco);dualcursor(''selectline'',[],[],[],get(gco,''Parent''))');
  %set erasemode to xor. This speeds things up a ton with large data sets
  % erasemode = get(lineh,'EraseMode');
  % set(lineh,'EraseMode','xor');
  lineh = min(lineh); %Lets just use one line. This was probably added first
  setappdata(axh,'SelectedLine',lineh); %The currently selected line.
  %Why the last line? Because it is the first one added
  xl = get(lineh,'XData');
  yl = get(lineh,'YData');
  %Find nearest value on the line
  [xv1,yv1] = local_nearest(x_init(1),xl,yl);
  [xv2,yv2] = local_nearest(x_init(2),xl,yl);
  %Build the string for the data label
  textstring1 = feval(datalabelformatfcnh,xv1,yv1);
  textstring2 = feval(datalabelformatfcnh,xv2,yv2);
  %Add the data label
  th1 = text(xv1,yv1,textstring1,'FontSize',8,'Tag','CursorText','Parent',axh);
  th2 = text(xv2,yv2,textstring2,'FontSize',8,'Tag','CursorText','Parent',axh);
  %For R13 or higher (MATLAB 6.5), use a background color on the text string
  v=ver('MATLAB');
  v=str2num(v.Version(1:3));
  if v&=6.5
  set(th1,'BackgroundColor','y');
  set(th2,'BackgroundColor','y');
  yl = ylim(axh);
  lim = localObjbounds(axh);
  lim = lim(3:4); %y values only
  yl(isinf(yl)) = lim(isinf(yl));
  %Add the cursors
  ph1 = line([xv1 xv1 xv1],[yl(1) yv1 yl(2)], ...
  'Color',color, ...
  'Marker',marker, ...
  'Tag','Cursor', ...
  'UserData',[lineh th1], ...
  'LineStyle','-', ...
  'Parent',axh);
  ph2 = line([xv2 xv2 xv2],[yl(1) yv2 yl(2)], ...
  'Color',color, ...
  'Marker',marker, ...
  'Tag','Cursor', ...
  'UserData',[lineh th2], ...
  'LineStyle','-', ...
  'Parent',axh);
  %Add context menu to the cursors
  % cmenu = uicontextmenu('Parent',get(axh,'Parent'));
  cmenu = uicontextmenu('Parent',hFig);
  set([ph1 ph2],'UIContextMenu',cmenu);
  % Define the context menu items
  item1 = uimenu(cmenu, 'Label', 'Export region to workspace', ...
  'Callback', 'dualcursor(''exportws'',[],[],[],get(gco,''Parent''))');
  item2 = uimenu(cmenu, 'Label', 'Export region to new figure', ...
  'Callback', 'dualcursor(''exportfig'',[],[],[],get(gco,''Parent''))');
  item3 = uimenu(cmenu, 'Label', 'Export cursor data to workspace', ...
  'Callback', 'dualcursor(''exportcursor'',[],[],[],get(gco,''Parent''));');
  item4 = uimenu(cmenu, 'Label', 'Turn cursors off', ...
  'Callback', 'dualcursor(''off'',[],[],[],get(gco,''Parent''))', ...
  'Separator','on');
  setappdata(th1,'Coordinates',[xv1 yv1]);
  setappdata(ph1,'Coordinates',[xv1 yv1]);
  setappdata(th2,'Coordinates',[xv2 yv2]);
  setappdata(ph2,'Coordinates',[xv2 yv2]);
  setappdata(th1,'CursorNumber',1);
  setappdata(ph1,'CursorNumber',1);
  setappdata(th2,'CursorNumber',2);
  setappdata(ph2,'CursorNumber',2);
  setappdata(th1,'FormatFcnH',datalabelformatfcnh);
  setappdata(th2,'FormatFcnH',datalabelformatfcnh);
  setappdata(th1,'Offset',[0 0]); %Offset for the text label from the data value
  setappdata(th2,'Offset',[0 0]); %Offset for the text label from the data value
  % mh = uicontextmenu('Tag','DeleteObject', ...
  % 'Callback','ud = get(gco,''UserData'');delete([gco ud(2)]);');
  % set([th1 th2],'UIContextMenu',mh);
  set(th1,'UserData',[lineh ph1]); %Store handle to line
  set(th2,'UserData',[lineh ph2]); %Store handle to line
  %Calculate Difference
  dx = xv2 - xv1;
  dy = yv2 - yv1;
  %Add display for cursor deltas
  deltah(1) = text(deltalabelpos(1,1),deltalabelpos(1,2),['({x}_{2}-{x}_{1}) = ' num2str(dx,'%+.2f')], ...
  'Units','Normalized', ...
  'HorizontalAlignment','left', ...
  'Tag','CursorDeltaText', ...
  'FontSize',8, ...
  'Interpreter','tex', ...
  'Parent',axh); %dx
  deltah(2) = text(deltalabelpos(2,1),deltalabelpos(2,2),['{y}_{2}-{y}_{1} = ' num2str(dy,'%+.2f')], ...
  'Units','Normalized', ...
  'HorizontalAlignment','left', ...
  'Tag','CursorDeltaText', ...
  'FontSize',8, ...
  'Interpreter','tex', ...
  'Parent',axh); %dy
  %Set Application Data.
  setappdata(axh,'Delta_Handle',deltah);
  setappdata(axh,'Marker',marker);
  setappdata(axh,'Color',color);
  set(hFig,'WindowButtonDownFcn','dualcursor(''down'',[],[],[],get(gco,''Parent''))')
  set(hFig,'DoubleBuffer','on'); %eliminate flicker
  case 'down' % Execute the WindowButtonDownFcn
  htype = get(gco,'Type');
  tag = get(gco,'Tag');
  marker = getappdata(axh,'Marker');
  color = getappdata(axh,'Color');
  %If it's a movable object (Cursor, CursorText label, or Cursor Delta Text
  %label), make it movable.
  if strcmp(tag,'CursorText') | strcmp(tag,'Cursor') | strcmp(tag,'CursorDeltaText')
  set(gco,'EraseMode','xor')
  set(gcf,'WindowButtonMotionFcn','dualcursor(''move'',[],[],[],get(gco,''Parent''))', ...
  'WindowButtonUpFcn','dualcursor(''up'',[],[],[],get(gco,''Parent''))');
  if strcmp(tag,'Cursor') %If clicked on a cursor
  %Label the cursor we are moving. Add a text label just above the plot
  CursorNumber = getappdata(gco,'CursorNumber');
  cnstr = num2str(CursorNumber);
  xl = xlim(axh);
  lim = localObjbounds(axh);
  lim = lim(1:2); %x values only
  xl(isinf(xl)) = lim(isinf(xl));
  % yl = lim(3:4);
  xv = getappdata(gco,'Coordinates');
  xv = xv(1);
  %Convert to normalized
  xn = (xv - xl(1))/(xl(2) - xl(1));
  yn = 1.05;
  CNh = text(xn,yn,cnstr, ...
  'Units','Normalized', ...
  'HorizontalAlignment','center', ...
  'Parent',axh); %dx
  %For R13 or higher (MATLAB 6.5), use a background color on the text string
  v=ver('MATLAB');
  v=str2num(v.Version);
  if v&=6.5
  set(CNh,'BackgroundColor','y');
  setappdata(gco,'CNh',CNh);
  case 'move' % Execute the WindowButtonMotionFcn
  htype = get(gco,'Type');
  tag = get(gco,'Tag');
  if ~isempty(gco)
  %Special (simple) case - just repositioning the delta labels
  if strcmp(tag,'CursorDeltaText') %The cursor delta labels.
  cp = get(axh,'CurrentPoint');
  pt = cp(1,[1 2]);
  %Put into normalized units
  lim = localObjbounds(axh);
  ax(isinf(ax)) = lim(isinf(ax));
  pt(1) = (pt(1) - ax(1))/(ax(2)-ax(1));
  pt(2) = (pt(2) - ax(3))/(ax(4)-ax(3));
  set(gco,'Position', [pt 0])
  drawnow
  return
  %Is this the cursor or the text
  if strcmp(tag,'CursorText') %The text
  handles = get(gco,'UserData');
  ph = handles(2);
  slide = 0; %Don' just reposition text
  else %The marker
  handles = get(gco,'UserData');
  th = handles(2);
  slide = 1; %Slide along line to next data point
  offset = getappdata(th,'Offset'); %Offset from data value
  cp = get(axh,'CurrentPoint');
  pt = cp(1,[1 2]);
  %Constrain to Line
  lh = getappdata(get(th,'Parent'),'SelectedLine');
  % lh = handles(1); %Line
  x = cp(1,1); %first xy values
  y = cp(1,2); %first xy values
  if slide %Move to new data value
  xl = get(lh,'XData');
  yl = get(lh,'YData');
  %Get nearest value
  [xv,yv]=local_nearest(x,xl,yl);
  %If we are moving a cursor, must move the cursor number label, too
  if strcmp(tag,'Cursor')
  %Move the Cursor Number label, too
  CNh = getappdata(gco,'CNh');
  pos = get(CNh,'Position');
  xlm = xlim(axh);
  lim = localObjbounds(axh);
  lim = lim(1:2); %x values only
  xlm(isinf(xlm)) = lim(isinf(xlm));
  xn = (xv - xlm(1))/(xlm(2)-xlm(1));
  set(CNh,'Position',[xn pos(2:3)])
  yl = ylim(axh);
  lim = localObjbounds(get(lh,'Parent'));
  lim = lim(3:4); %y values only
  yl(isinf(yl)) = lim(isinf(yl));
  datalabelformatfcnh = getappdata(th,'FormatFcnH');
  textstring = feval(datalabelformatfcnh,xv,yv);
  set(th,'Position', [xv yv 0] + [offset 0],'String',textstring)
  set(ph,'XData',[xv xv xv],'YData',[yl(1) yv yl(2)]);
  setappdata(ph,'Coordinates',[xv yv]);
  setappdata(th,'Coordinates',[xv yv]);
  %Update delta calculation
  cursors = findobj(axh,'Tag','Cursor');
  cn1 = getappdata(cursors(1),'CursorNumber');
  if cn1==2 %Switch order
  temp = cursors(1);
  cursors(1) = cursors(2);
  cursors(2) =
  deltah = getappdata(axh,'Delta_Handle'); %Handle to cursors
  %Positions of two dualcursors
  xy1 = getappdata(cursors(1),'Coordinates');
  xy2 = getappdata(cursors(2),'Coordinates');
  %Calculate Difference
  dx = xy2(1) - xy1(1);
  dy = xy2(2) - xy1(2);
  set(deltah(1),'String',['({x}_{2}-{x}_{1}) = ' num2str(dx,'%+.2f')]);
  set(deltah(2),'String',['({y}_{2}-{y}_{1}) = ' num2str(dy,'%+.2f')]);
  else %Just move text around.
  set(th,'Position', [x y 0])
  drawnow
  case 'up' % Execute the WindowButtonUpFcn
  htype = get(gco,'Type');
  tag = get(gco,'Tag');
  if strcmp(tag,'CursorText') | strcmp(tag,'Cursor') | strcmp(tag,'CursorDeltaText');
  set(gco,'EraseMode','Normal')
  set(gcf,'WindowButtonMotionFcn','')
  if strcmp(tag,'CursorText') %If the text label, record it's relative position
  cp = get(axh,'CurrentPoint');
  pt = cp(1,[1 2]);
  coords = getappdata(gco,'Coordinates');
  offset(1) = pt(1) - coords(1);
  offset = pt -
  setappdata(gco,'Offset',offset);
  if strcmp(tag,'Cursor') %Delete the temporary cursor number label
  CNh = getappdata(gco,'CNh');
  delete(CNh);
  case 'selectline' % User selected a new line to be active
  %Make the selected line bold
  lh = getappdata(axh,'SelectedLine');
  lw = get(lh,'LineWidth');
  set(lh,'LineWidth',5*lw);
  drawnow
  %Update the cursors
  dualcursor('update',deltalabelpos,marker_color,datalabelformatfcnh,axh);
  %Put the line back the way you found it!
  set(lh,'LineWidth',lw);
  case 'update' %Update the cursor value
  %Find the position of the existing cursors
  cursors = findobj(axh,'Tag','Cursor');
  cd1 = getappdata(cursors(1),'Coordinates');
  cd2 = getappdata(cursors(2),'Coordinates');
  cn1 = getappdata(cursors(1),'CursorNumber');
  cn2 = getappdata(cursors(2),'CursorNumber');
  clear x
  x(cn1) = cd1(1); %x value of cursor number cn1
  x(cn2) = cd2(1); %x value of cursor number cn2
  lh = getappdata(axh,'SelectedLine');
  handles = get(cursors(cn1),'UserData');
  th1 = handles(2);
  handles = get(cursors(cn2),'UserData');
  th2 = handles(2);
  offset1 = getappdata(th1,'Offset'); %Offset from data value
  offset2 = getappdata(th2,'Offset'); %Offset from data value
  ylm = ylim(axh);
  lim = localObjbounds(get(lh,'Parent'));
  lim = lim(3:4); %y values only
  ylm(isinf(ylm)) = lim(isinf(ylm));
  xl = get(lh,'XData');
  yl = get(lh,'YData');
  %Get nearest value
  [xv1,yv1]=local_nearest(x(1),xl,yl);
  [xv2,yv2]=local_nearest(x(2),xl,yl);
  datalabelformatfcnh = getappdata(th1,'FormatFcnH');
  % textstring1 = {['x=' num2str(xv1)];['y=' num2str(yv1)]};
  % textstring2 = {['x=' num2str(xv2)];['y=' num2str(yv2)]};
  textstring1 = feval(datalabelformatfcnh,xv1,yv1);
  textstring2 = feval(datalabelformatfcnh,xv2,yv2);
  set(th1,'Position', [xv1 yv1 0] + [offset1 0],'String',textstring1)
  set(th2,'Position', [xv2 yv2 0] + [offset2 0],'String',textstring2)
  set(cursors(cn1),'XData',[xv1 xv1 xv1],'YData',[ylm(1) yv1 ylm(2)]);
  set(cursors(cn2),'XData',[xv2 xv2 xv2],'YData',[ylm(1) yv2 ylm(2)]);
  %Update delta calculation
  deltah = getappdata(axh,'Delta_Handle'); %Handle to delta calculation
  % %Positions of two dualcursors
  xy1 = getappdata(cursors(1),'Coordinates');
  xy2 = getappdata(cursors(2),'Coordinates');
  %Calculate Difference
  dx = xv2 - xv1;
  dy = yv2 - yv1;
  set(deltah(1),'String',['{x}_{2}-{x}_{1} ' num2str(dx,'%+.2f')]);
  set(deltah(2),'String',['{y}_{2}-{y}_{1} ' num2str(dy,'%+.2f')]);
  case 'exportws' %Export selected region to workspace
  [xd,yd] = local_extractregion(axh);
  %If there's only one line, don't make the user hassle with cell arrays
  if length(xd)==1
  xd = xd{1};
  yd = yd{1};
  cursors.xd =
  cursors.yd =
  assignin('base','cursors',cursors);
  disp('Variable: cursors created in workspace');
  case 'exportfig' %Export selected region to a new figure
  % [xd,yd,proplist,props] = local_
  [xd,yd,hgS] = local_extractregion(axh);
  %Create new plot
  struct2handle(hgS,ax);
  %Get labels from axes, too
  %Clunky, but it seems to work
  %First, create empty title, xlabel, ylabel
  newhandles(1) = title('');
  newhandles(2) = xlabel('');
  newhandles(3) = ylabel('');
  %Get strings from original plot
  props = {'Title','xlabel','ylabel'};
  vals = get(axh,props);
  handles = [vals{:}];
  str = get(handles,'String');
  %Set the new strings to match
  set(newhandles,{'String'},str)
  case 'exportcursor'
  % Get cursor coordinates
  cursordata = dualcursor(axh);
  % Push the data into the base workspace.
  assignin('base','cursordata',cursordata);
  disp('Variable: cursordata created in workspace');
  case 'off' % Unset the WindowButton...Fcns
  % set(get(axh,'Parent'),'WindowButtonDownFcn','','WindowButtonUpFcn','')
  set(hFig,'WindowButtonDownFcn','','WindowButtonUpFcn','')
  h1 = findobj(axh,'Tag','CursorText'); %All text
  h2 = findobj(axh,'Tag','Cursor'); %The cursors
  h3 = findobj(axh,'Tag','CursorDeltaText'); %The cursors
  lineh = local_findlines(axh);
  set(lineh,'ButtonDownFcn','');
  % erasemode = getappdata(axh,'OriginalEraseMode');
  % if isempty(erasemode), erasemode = 'normal'; %handles first time
  % set(local_findlines(axh),'EraseMode',erasemode);
  delete([h1;h2;h3]);
  end %switch/case on action
  % function hFig = figHandle(axh)
  % % Get the handle to the parent figure
  % hFig = ancestor(axh,'figure');
  function [xv,yv]=local_nearest(x,xl,yl)
  %Inputs:
  % x Selected x value
  % xl Line Data (x)
  %Find nearest value of [xl] to (x)
  %Special Case: Line has a single non-singleton value
  if sum(isfinite(xl))==1
  fin = find(isfinite(xl));
  xv = xl(fin);
  yv = yl(fin);
  %Normalize axes
  xlmin = min(xl);
  xlmax = max(xl);
  xln = (xl - xlmin)./(xlmax - xlmin);
  xn = (x - xlmin)./(xlmax - xlmin);
  %Find nearest x value only.
  c = abs(xln - xn);
  [junk,ind] = min(c);
  %Nearest value on the line
  xv = xl(ind);
  yv = yl(ind);
  function textstring = local_maketextstring(xv,yv)
  textstring = {['x = ' num2str(xv,'%2g')];
  ['y = ' num2str(yv,'%2.2g')]};
  function [xd,yd,hgS] = local_extractregion(axh)
  val = dualcursor(axh);
  %Find all lines
  lineh = local_findlines(axh);
  Nl = length(lineh);
  %Get all line properties, so we can reproduce the appearance
  hgS = handle2struct(lineh); %Get properties
  xd = get(lineh,'XData');
  yd = get(lineh,'YData');
  %Figure out the index into these lines that val corresponds to
  x1ind = zeros(Nl,1);
  x2ind = zeros(Nl,1);
  %Special handling for single line case
  if Nl==1
  xd= {xd};
  yd = {yd};
  for ii = 1:Nl
  x1ind(ii) = max(find(xd{ii}&=val(1)));
  x2ind(ii) = max(find(xd{ii}&=val(3)));
  %Keep data from this region only
  xd{ii} = xd{ii}(x1ind(ii):x2ind(ii));
  yd{ii} = yd{ii}(x1ind(ii):x2ind(ii));
  %Update handle structure, to make plotting really easy
  hgS(ii).properties.XData = xd{ii};
  hgS(ii).properties.YData = yd{ii};
  function lineh = local_findlines(axh);
  lineh = findobj(axh,'Type','line'); %Find a line to add cursor to
  dots = findobj(axh,'Type','line','Tag','Cursor'); %Ignore existing cursors
  lineh = setdiff(lineh,dots);
  %Ignore lines with only one or two values - these are probably annotations of some
  xdtemp = get(lineh,'XData');
  linehtemp =
  lineh=[];
  if ~iscell(xdtemp) %If there's only one line, force data into a cell array
  xdtemp = {xdtemp};
  for ii=1:length(xdtemp);
  if length(xdtemp{ii})&2
  lineh = [ linehtemp(ii)];
  function lim = localObjbounds(axh);
  % Get x limits of all data in axes axh
  kids = get(axh,'Children');
  xmin = I xmax = -I
  ymin = I ymax = -I
  for ii=1:length(kids)
  try % Pass through if can't get data. hopefully we hit at least one
  xd = get(kids(ii),'XData');
  xmin = min([xmin min(xd(:))]);
  xmax = max([xmax max(xd(:))]);
  yd = get(kids(ii),'YData');
  ymin = min([ymin min(yd(:))]);
  ymax = max([ymax max(yd(:))]);
  % Nuclear option, in case things went really bad
  xmin(xmin==Inf) = 0; xmax(xmax==-Inf) = 1;
  ymin(ymin==Inf) = 0; ymax(ymax==-Inf) = 1;
  lim = [xmin xmax ymin ymax];
  end(李洋 安)
暂无专家推荐本文
同时转发到我的微博
将自动提交到和讯看点,
请输入您的观点并提交。
请输入您的观点 168字以内
同时转发到我的微博置顶我的观点
每日要闻推荐
社区精华推荐
精彩专题图鉴
网上投洽会
  【独家稿件声明】凡注明“和讯”来源之作品(文字、图片、图表),未经和讯网授权,任何媒体和个人不得全部或者部分转载。如需转载,请与010-联系;经许可后转载务必请注明出处,并添加源链接,违者本网将依法追究责任。

我要回帖

更多关于 如果我有个刘易阳 的文章

 

随机推荐