How to set data cursor to max value programically?

18 Ansichten (letzte 30 Tage)
Rohit Bhoi
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)])

Akzeptierte Antwort

Baltam
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
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
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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Adam Danz
Adam Danz am 29 Okt. 2020
Bearbeitet: Adam Danz am 29 Okt. 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);
  3 Kommentare
Adam Danz
Adam Danz am 7 Jul. 2022
h1 = plot(magic(5)) creates 5 handles, one for each column of data
h1 = plot(magic(5))
h1 =
5×1 Line array: Line Line Line Line Line
close % close figure, we don't need it here
h1(2) selects the second line object.
yijun guo
yijun guo am 11 Jul. 2022
thanks a lot

Melden Sie sich an, um zu kommentieren.


Leandro de Oliveira
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:
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

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by