How to set data cursor to max value programically?

149 views (last 30 days)
Rohit Bhoi
Rohit Bhoi on 11 Apr 2016
Edited: Adam Danz on 29 Oct 2020
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)])

Accepted Answer

Baltam
Baltam on 11 Apr 2016
Edited: Walter Roberson on 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 Comments
Scotty Neally
Scotty Neally on 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

Sign in to comment.

More Answers (2)

Leandro de Oliveira
Leandro de Oliveira on 28 Sep 2019
Edited: Leandro de Oliveira on 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:
First of all, I get this code HERE.
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_P1_Bode.jpg
  1 Comment
mogilipuri harish
mogilipuri harish on 20 Apr 2020
how can we add multiple datatips using programically

Sign in to comment.


Adam Danz
Adam Danz on 29 Oct 2020
Edited: Adam Danz on 29 Oct 2020
Update: as of r2019b you can use datatip(__) to programmatically place a data tip.
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);

Categories

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!