How to draw a "xline" with a given height for the line and a given vertical position for the text?
129 views (last 30 days)
Show older comments
In other words, I need a shorter xline and I want to decide exactly how short that line will be.
Also, I would like to customise more the vertical position of the text, i.e. putting it a bit higher or a bit lower than what given by 'LabelVerticalAlignment'.
0 Comments
Accepted Answer
Star Strider
on 11 Mar 2022
The xline function by default goes to the limits if the y-axis. The label only has limited options for positioning.
It will likely be easier to create a single vertical line and attach a text object to it:
x = 1:0.1:10;
y = sin(2*pi*x/5);
figure
plot(x, y)
[xl,xt] = xlin(7,'Message', 0.1, 0.8, 0.25);
grid
function [hl,ht] = xlin(x,txt,ylo,yhi,ytxt)
% Documentation:
% x = x-Position
% txt = Text String
% ylo = Low y-Value (Start)
% yhi = High y-Value (End)
% ytxt = Text Starting Position
hold on
hl = plot([x x],[ylo yhi],'DisplayName',txt, 'LineWidth',1);
ht = text(x,ytxt, txt, 'Horiz','left', 'Vert','top', 'Rotation',90);
hold off
end
Returning the ‘hl’ and ‘ht’ handles permits easily changing certain attributes of the line and text objects without changing the function.
.
2 Comments
More Answers (2)
Voss
on 11 Mar 2022
Here's how you can specify the Vertical and Horizontal Alignment of the xline's label:
warning off all
figure();
xline(1,'_','Line at x = 1','LabelVerticalAlignment','top');
xline(2,'_','Line at x = 2','LabelVerticalAlignment','bottom');
xline(3,'-','Line at x = 3','LabelVerticalAlignment','middle');
xlim([0 4]);
figure();
xline(1,'_','Line at x = 1','LabelHorizontalAlignment','left');
xline(2,'_','Line at x = 2','LabelHorizontalAlignment','right');
xline(3,'_','Line at x = 3','LabelHorizontalAlignment','center');
xlim([0 4]);
If you don't want the xline itself to span the y-limits of the axes, i.e., have an xline of a given height, and/or have more control over where the label is, then you're better off creating a regular line (not an xline) and a text label separately:
figure();
line([1 1],[0 4],'Color','k');
text(1,1.5,'Line at x = 1','Rotation',90,'VerticalAlignment','bottom','HorizontalAlignment','center');
ylim([0 6]);
3 Comments
Voss
on 11 Mar 2022
Edited: Voss
on 11 Mar 2022
You're welcome!
Note that it is more efficient to use the low-level function line() than the high-level function plot(), and that plot() can potentially do unwanted things to your axes (or objects in it) that line() will not do. Therefore, I think it is better to use line() for this purpose.
Walid
on 11 Mar 2022
Please check ConstantLine Properties (frome MATLAB R2021a):
you must use: xline(5,'LabelHorizontalAlignment',''left'') and likewise LabelVerticalAlignment for top, middle or button of the xline.
See Also
Categories
Find more on Annotations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!