Placing annotations at specific xy coordinates
147 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Vance Blake
el 13 de Sept. de 2019
Comentada: DGM
el 22 de Abr. de 2025
Just wondering but I wanted to put annotations/text boxes at specific coordinates but when I read up on the page I saw that the values of x and y in the 'dim' vector must be between 0 and 1. Im just looking for a way to place 'X's at specific xy coordinates to signify that those points are no longer being considered for my calculations?? I figured annotations would be good way to accomplish that because I wanted to avoid matlab cconsidering a plotted X as an active point and therefore valid for my calculations. If you have any work arounds or suggestions Im all ears. Thanks for the help
0 comentarios
Respuesta aceptada
Adam Danz
el 13 de Sept. de 2019
Editada: Adam Danz
el 21 de Abr. de 2025
Annotation objects are designed to annotation the figure space in figure coordinates. They are not designed to be positioned within axes coordinates. For axes and data coordinates, using axes objects such as rectangle or text.
hold on
plot(x,y,'rx')
If you wanted rectangles for whatever reason,
widthHeight = [.1,.1];
rectangle('Position', [x-widthHeight(1)/2, y-widthHeight(2)/2, widthHeight])
Más respuestas (4)
Olle Trollberg
el 29 de Ag. de 2023
I recently ran into this and here is a simple way to get around it using some anonymous functions to do rescaling.
Works at least in 2022b
plot(x,y) % Create whatever plot
ax = gca;
% Define helper funcitons to normalize from axis coordinates to normalized position in figure.
xnorm = @(x)((x-ax.XLim(1))./(ax.XLim(2)-ax.XLim(1))).*ax.InnerPosition(3)+ax.InnerPosition(1)
ynorm = @(y)((y-ax.YLim(1))./(ax.YLim(2)-ax.YLim(1))).*ax.InnerPosition(4)+ax.InnerPosition(2)
annotation('textarrow',xnorm(x_in_axis_coordinates),ynorm(y_in_axis_coordinates),'string','Arrow Text');
0 comentarios
Image Analyst
el 13 de Sept. de 2019
No, not true. If you want to place annotation text onto a plot you can use text() using the x,y that's used for that plot, whatever range it might have, which can be more than 1.
Have you tried
badIndexes = .......whatever you need to do to identify "points are no longer being considered for my calculations"
hold on
plot(x(badIndexes), y(badIndexes), 'rx', 'MarkerSize', 15, 'LineWidth', 2) % Overlay big red X's
0 comentarios
Bruno Luong
el 14 de Sept. de 2019
There are several tool on File Exchange, such as this one
0 comentarios
Dmitrij Usov
el 16 de Abr. de 2025
f = figure;
an = annotation('arrow');
an.Parent = f.CurrentAxes;
an.X = [0 1];
an.Y = [0 1];
3 comentarios
Adam Danz
el 21 de Abr. de 2025
Also watch out for axes direction.
Note that assigning axes to the annotation's parent is undocumented.
% some fake data to plot
x = linspace(0,1.5,100);
plot(x,x.^2); hold on
plot(x,sqrt(x))
xlim([0 1.5])
ylim([0 1.5])
set(gca,'YDir','Reverse') % <-------------------Added
% a text box hanging out of the axes
an1 = annotation('textbox');
an1.Parent = gca;
an1.String = 'the curves cross here';
an1.HorizontalAlignment = 'center';
an1.VerticalAlignment = 'middle';
an1.Position = [1.1 0.95 0.6 0.08];
an1.BackgroundColor = [1 1 0];
% a text arrow doing the same
an2 = annotation('textarrow');
an2.Parent = gca;
an2.String = 'the curves cross here';
an2.HorizontalAlignment = 'left';
an2.VerticalAlignment = 'top';
an2.X = [1.15 1];
an2.Y = [0.8 1];
% another arrow pointing to something beyond ylim
an3 = annotation('textarrow');
an3.Parent = gca;
an3.String = 'this line keeps going';
an3.HorizontalAlignment = 'center';
an3.VerticalAlignment = 'top';
an3.X = [0.5 1.5];
an3.Y = [1.1 1.5^2];
Ver también
Categorías
Más información sobre Annotations en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!