How to draw a "xline" with a given height for the line and a given vertical position for the text?
    59 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
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 Commenti
Risposta accettata
  Star Strider
      
      
 il 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 Commenti
Più risposte (2)
  Voss
      
      
 il 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 Commenti
  Voss
      
      
 il 11 Mar 2022
				
      Modificato: Voss
      
      
 il 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
 il 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.
Vedere anche
Categorie
				Scopri di più su Axis Labels in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



