How to set data cursor to max value programically?
    15 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Rohit Bhoi
      
 am 11 Apr. 2016
  
    
    
    
    
    Kommentiert: yijun guo
 am 11 Jul. 2022
            Hello, I want to set data cursor to max value how to do it programically? I used following code but its not working properly. Its how cursor for max value but doesn't set value...
x = 0:pi/20:2*pi; 
y = sin(x*0.3)+2*cos(2*x);
[max_val,index] = max(y);
plot(x,y); hold on; 
plot(x(index),max_val,'ks','markerfacecolor',[0 0 0]);
text(x(index)-0.5,max_val-0.3,['Max: ', num2str(max_val)])
0 Kommentare
Akzeptierte Antwort
  Baltam
      
 am 11 Apr. 2016
        
      Bearbeitet: Walter Roberson
      
      
 am 11 Apr. 2016
  
      x = 0:pi/20:2*pi; 
y = sin(x*0.3)+2*cos(2*x);
[max_val,index] = max(y);
h =figure; hPlot = plot(x,y);
cursorMode = datacursormode(h);
hDatatip = cursorMode.createDatatip(hPlot);
pos = [x(index) y(index) 0];
set(hDatatip, 'Position', pos)         
updateDataCursors(cursorMode)
Is this what you need?
Kind regards,
Baltam
3 Kommentare
  Scotty Neally
      
 am 9 Apr. 2020
				I've tried using this code and it works great in version R2019b with a caveat: when I set the position of the datatip it is highly dependant on the figure window size. I noticed that my X-axis value was a few points off and tried to determine whether my index was incorrect. It turns out that if you rescale the figure window before sending the set(hDatatip,'Position',[X Y Z]); command you will get completely different results based on the figure window size at the time....
Perhaps this is covered in the undocumented section of matlab (https://undocumentedmatlab.com/articles/controlling-plot-data-tips)? I haven't had a chance to read through in detail yet.
Thanks!
-Scotty 
  Scotty Neally
      
 am 28 Apr. 2020
				Was just able to solve my problem with a combination of using dummy plot commands to re-focus the datacursor to the correct axes before creating a new datatip. Also, using the Cursor.DataIndex was infinitely more reliable for me instead of using the built-in search function to find the location when "position" is specified:
plot(app.UIAxes2,[],[]); %refocus datacursormode on UIAxes2
plot(app.UIAxes1,[],[]); %refocus datacursormode on UIAxes1
hDatatip.Cursor.DataIndex = 501; %set datatip position based on data index 
Weitere Antworten (2)
  Adam Danz
    
      
 am 29 Okt. 2020
        
      Bearbeitet: Adam Danz
    
      
 am 29 Okt. 2020
  
      Demo:
fig = figure(); 
ax1 = subplot(1,2,1); 
h1 = plot(magic(5));
datacursormode on
datatip(h1(2), 2, 5);
subplot(1,2,2)
h2 = plot(rand(10), 'sb');
datatip(h2(3),'DataIndex',5);
3 Kommentare
  Adam Danz
    
      
 am 7 Jul. 2022
				h1 = plot(magic(5)) creates 5 handles, one for each column of data
h1 = plot(magic(5))
close % close figure, we don't need it here
h1(2) selects the second line object.  
  Leandro de Oliveira
 am 28 Sep. 2019
        
      Bearbeitet: Leandro de Oliveira
 am 28 Sep. 2019
  
      Hi guys, I did a new version because it doesn't worked propoerly to me, the data tip do not get updated, so there it is:
clc; clear all; close all;
%-------------------------------------------------------------------------%
s = tf('s');
%-------------------------------------------------------------------------%
G = (s+40)/((s^2)+(1.2*s)+4);
%-------------------------------------------------------------------------%
lw = 2;
h1 = figure(1);
    [mag, fase, w] = bode(G);
    hObj = semilogx(w, 20*log10(squeeze(mag)), 'linewidth', lw);
    [max_val, index] = max(mag);
    cursorMode = datacursormode(h1);
    hDatatip = cursorMode.createDatatip(hObj);
    pos = [w(index) 20*log10(mag(index))];
    set(get(hDatatip, 'DataCursor'), 'DataIndex', index, 'TargetPoint', pos);
    set(hDatatip, 'Position', pos);
    updateDataCursors(cursorMode);
    grid on
%-------------------------------------------------------------------------%   

1 Kommentar
Siehe auch
Kategorien
				Mehr zu Entering Commands finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!







