How to automatically calculate and display the difference between 2 datatip points in MATLAB R2023a?

10 Ansichten (letzte 30 Tage)
How can I automatically calculate the difference between two selected datatips  and display them as "dx" and "dy" on the chart? What steps should I follow to achieve this?

Akzeptierte Antwort

MathWorks Support Team
MathWorks Support Team am 25 Sep. 2023
There are at least two ways to achieve the intended workflow:
1 . Using the "ginput" function:
One suggested approach is to manually select the points using the "ginput" function and perform the calculation with the datatip "UpdateFcn" callback function.
The "ginput" function allows you to select the coordinates of multiple points within Cartesian, polar, or geographic axes. To choose a point, you move the cursor to the desired location and press a mouse button or a key on the keyboard. Pressing the Return key stops the selection before all points are chosen. The selected points' coordinates are returned by MATLAB.
The documentation for "ginput" can be found at: 
Here is the workaround code:
% Create a new figure window
f = figure;
% Define x and y values for plotting
x = 1:10;
y = x.^2;
% Plot y = x^2
plot(x, y);
% Prompt the user to select the first point of interest using the mouse
firstPoint = ginput();
% Prompt the user to select the second point of interest using the mouse
secondPoint = ginput();
% Calculate the difference in x-coordinates between the two selected points
xDiff = secondPoint(1) - firstPoint(1);
% Calculate the difference in y-coordinates between the two selected points
yDiff = secondPoint(2) - firstPoint(2);
2. Using "datatips" function:
If you want to incorporate only datatips in your workflow, you can use the following code. 
This workaround using "uifigure" creates a uifigure where you can select datatips.
uif = uifigure;
ax = axes(uif);
x = 1:10;
y = x.^2;
plot(ax,x,y);
xlim([1, 10]); % Adjust xlim and ylim
ylim([2, 500]);
First, execute the above section, and after selecting the 2 datatips execute the following code to compute the difference between the datatips: 
 
datatips = findobj(uif,'Type','datatip'); % Get the selected datatips from the plot
dy = datatips(2).Y - datatips(1).Y; %Calculation of dy
dx = datatips(2).X - datatips(1).X; %Calculation of dx
 Then to show the difference of both the datatips on the plot execute the following code snippet: 
% Show specific datatip (dx,dy) on the graph
hold(ax,'on')
plot(ax, datatips(1).X, datatips(1).Y, 'ro', 'MarkerSize', 10);
plot(ax, datatips(2).X, datatips(2).Y, 'ro', 'MarkerSize', 10);
plot(ax, dx, dy, 'ro', 'MarkerSize', 10);
plot(ax,x,y);
text(ax, datatips(1).X, datatips(1).Y, sprintf('dx = %d\ndy = %d', dx, dy))
hold(ax,'off')

Weitere Antworten (0)

Kategorien

Mehr zu Data Exploration finden Sie in Help Center und File Exchange

Produkte


Version

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by