How to draw a "xline" with a given height for the line and a given vertical position for the text?
138 views (last 30 days)
How to draw a xline with a given height for the line and a given vertical position for the text?
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'.
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);
[xl,xt] = xlin(7,'Message', 0.1, 0.8, 0.25);
function [hl,ht] = xlin(x,txt,ylo,yhi,ytxt)
% x = x-Position
% txt = Text String
% ylo = Low y-Value (Start)
% yhi = High y-Value (End)
% ytxt = Text Starting Position
hl = plot([x x],[ylo yhi],'DisplayName',txt, 'LineWidth',1);
ht = text(x,ytxt, txt, 'Horiz','left', 'Vert','top', 'Rotation',90);
Returning the ‘hl’ and ‘ht’ handles permits easily changing certain attributes of the line and text objects without changing the function.
More Answers (2)
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.
Voss on 11 Mar 2022
Here's how you can specify the Vertical and Horizontal Alignment of the xline's label:
warning off all
xline(1,'_','Line at x = 1','LabelVerticalAlignment','top');
xline(2,'_','Line at x = 2','LabelVerticalAlignment','bottom');
xline(3,'-','Line at x = 3','LabelVerticalAlignment','middle');
xline(1,'_','Line at x = 1','LabelHorizontalAlignment','left');
xline(2,'_','Line at x = 2','LabelHorizontalAlignment','right');
xline(3,'_','Line at x = 3','LabelHorizontalAlignment','center');
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:
line([1 1],[0 4],'Color','k');
text(1,1.5,'Line at x = 1','Rotation',90,'VerticalAlignment','bottom','HorizontalAlignment','center');