# Adding vertical line to plot?

1 680 vues (au cours des 30 derniers jours)
Philip le 25 Fév 2011
Commenté : Walter Roberson le 26 Fév 2023
Hi there, Can anyone please tell me how I can add a vertical line to my plot at a specified sample point? For example, I have a a 1x41 vector of intensity values, and I would like to add a vertical line on the center sample (sample number 21). Many thanks!
##### 3 commentairesAfficher 1 commentaire plus ancienMasquer 1 commentaire plus ancien
Benita le 26 Fév 2023
(4x3+y3 )dx+(3xy²-8y3)dy=0
Walter Roberson le 26 Fév 2023

Connectez-vous pour commenter.

### Réponse acceptée

Michelle Hirsch le 28 Août 2023
Modifié(e) : MathWorks Support Team le 28 Avr 2022
Woohoo - this is built into MATLAB now, as of R2018b!
If you are running R2018b or later, you can use the “xline” and “yline” functions. For example, create a vertical line at x=5:
xline(5)
Create a horizontal line at y=10:
yline(10)
Starting in R2021a, you can create multiple horizontal or vertical lines in one pass. For example, create vertical lines at x=1, x=2, and x=3:
xline([1 2 3])
If you are running R2018a or earlier, use the “plot” function with this pattern:
Horizontal line:
plot([x1 x2],[y y])
Vertical line:
plot([x x],[y1 y2])
For example, plot a vertical line at x = 21. Set the y values using the y-axis limits of the axes.
y = ylim; % current y-axis limits
plot([21 21],[y(1) y(2)])
##### 8 commentairesAfficher 6 commentaires plus anciensMasquer 6 commentaires plus anciens
Walter Roberson le 21 Fév 2021
Roberto Chang le 23 Août 2021
Hello all! do you know if this magical (awesome) feature can be done in Z axis for bar3?

Connectez-vous pour commenter.

### Plus de réponses (10)

line([x x], [y1 y2]); is the easy command;
##### 4 commentairesAfficher 2 commentaires plus anciensMasquer 2 commentaires plus anciens
Claire Flashman le 11 Fév 2018
Thank you!
Christian Sanchez le 8 Mai 2020
Genial

Connectez-vous pour commenter.

carolina franco le 26 Oct 2017
Modifié(e) : MathWorks Support Team le 8 Nov 2018
You can plot a horizontal or vertical line using the “plot” function with this pattern:
- Horizontal line:
plot([x1 x2],[y y])
- Vertical line:
plot([x x],[y1 y2])
For example, plot a vertical line at x = 21. Set the y values using the y-axis limits of the axes.
y = ylim; % current y-axis limits
plot([21 21],[y(1) y(2)])
As Steven suggested, starting in R2018b, you can use the “xline” and “yline” functions instead. For more information, see:
##### 4 commentairesAfficher 2 commentaires plus anciensMasquer 2 commentaires plus anciens
Edward Manson le 28 Août 2019
Modifié(e) : Edward Manson le 28 Août 2019
What an absolute god, thankyou
Rasmus Ringsborg Nielsen le 11 Mar 2021
Thank you so much, works perfect!!

Connectez-vous pour commenter.

Mark le 12 Mar 2013
Modifié(e) : Mark le 12 Mar 2013
Probably the simplest way:
Choose the x-value where you want the line "xval." Choose the minimum y value to be displayed on your graph "ymin" and the maximum y value to be displayed on your graph "ymax."
x=[xval,xval];
y=[ymin,ymax];
plot(x,y)
Flaws with this method: probably will look silly if you use '-x' or '-.', these mark your specific points on the line, but you'll only have two (at least they're endpoints).
##### 0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

Steven Lord le 1 Nov 2018
If you're using release R2018b or later, use the xline or yline functions to create lines with constant x or y values respectively.
##### 1 commentaireAfficher -1 commentaires plus anciensMasquer -1 commentaires plus anciens
Gary Bikini le 26 Avr 2019

Connectez-vous pour commenter.

the cyclist le 25 Fév 2011
One way:
figure
x = rand(1,41);
y = 1:41;
plot(x,y,'r.');
line([x(21) x(21)],[0 41]);
set(gca,'YLim',[0 41])
##### 0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

James le 28 Mar 2014
Modifié(e) : James le 28 Mar 2014
There is an excellent answer over on http://stackoverflow.com/a/8108766/1194420 repeated below for convenience. ---
There exist an undocumented function graph2d.constantline:
plot(-2:5, (-2:5).^2-1)
%# vertical line
hx = graph2d.constantline(0, 'LineStyle',':', 'Color',[.7 .7 .7]);
changedependvar(hx,'x');
%# horizontal line
hy = graph2d.constantline(0, 'Color',[.7 .7 .7]);
changedependvar(hy,'y');
##### 5 commentairesAfficher 3 commentaires plus anciensMasquer 3 commentaires plus anciens
Walter Roberson le 8 Fév 2020
Déplacé(e) : DGM le 25 Fév 2023
-2:5 is the list of values -2 -1 0 1 2 3 4 5 . The .^2 squares each element of the list giving you 4 1 0 1 4 9 16 25 . Then you subtract 1 from each giving you 3 0 -1 0 3 8 15 24
Adrian Peters le 8 Fév 2020
Déplacé(e) : DGM le 25 Fév 2023
Now it makes sense to me! Thank you a lot!

Connectez-vous pour commenter.

Maybe it is a bit late but I want to contribute, there is a really easy way to add vertical and horizontal lines, you just have to use a hold and then overlap them over the main plot.
Before declaring the original plot, add a hold on to ensure it will retain both plots, then plot the lines, with this structure:
hold on;
plot(the main function)
plot([x x],[0 y_max]) % Vertical Line
plot([o x_max],[y y]) % Horizontal line
Being:
x: location on horizontal axis where you place the vertical line.
y: location on vertical axis where you place the horizontal line.
x_max: point where you want the vertical line to end.
y_max: point where you want the horizontal line to end.
##### 2 commentairesAfficher AucuneMasquer Aucune
Walter Roberson le 23 Avr 2018
If you use line() instead of plot() then you do not need the "hold". line() is one of the primitives that always adds to the current plot; it is the "high level plotting routines" that clear the current axes before plotting and need the "hold"
Thanks!

Connectez-vous pour commenter.

Julian Williams le 9 Fév 2019
Small additional suggestion, say you want to label your line in the legend so that it has some meaning, or take advantage of some of the easy to use options in plot, then using "hold", the ylim from the current axis and the "repmat" is very useful. You can also make multiple vertical lines with some spacing using this technique.
figure
% make some sort of illustration
T = 1000;
A = 0.7;
h = [];
Y = cumsum(sqrt(0.05).*randn(T,1));
X = (1:T)./T;
I = find(X>A);
Y(I) = Y(I(1));
h(1) = plot(X,Y,'-k','linewidth',2);
hold on
dims = get(gca,'ylim');
yy = linspace(dims(1),dims(2),100);
xx = repmat(A,1,100);
h(2) = plot(xx,yy,':r','linewidth',2);
dims = get(gca,'xlim');
xx = linspace(dims(1),dims(2).*A,100);
yy = repmat(Y(I(1)),1,100);
h(3) = plot(xx,yy,':b','linewidth',2);
grid on
G = legend(h,'Particle Motion','Stopping Point','Stopped Value');
set(G,'location','best','interpreter','latex');
Just a thought.
##### 0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

Guy Cohen le 22 Nov 2022
You can use arrayfun
x=1:180;
vLines=[20 40 50 120];%-- vector of lines to plot
hold on; arrayfun(@xline,vLines);%-- plot vertical lines
##### 2 commentairesAfficher AucuneMasquer Aucune
Walter Roberson le 22 Nov 2022
You could, but xline accepts a vector of values, so you can just
x=1:180;
xline([20 40 50 120])
Guy Cohen le 22 Nov 2022

Connectez-vous pour commenter.

Jos (10584) le 8 Juil 2014
You might also be interested in GRIDXY on the File Exchange:
##### 0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

### Catégories

En savoir plus sur 2-D and 3-D Plots dans Help Center et File Exchange

### Tags

Aucun tag saisi pour le moment.

### Community Treasure Hunt

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

Start Hunting!

Translated by