# Adding vertical line to plot?

4,735 次查看（过去 30 天）
Philip 2011-2-25

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 个评论显示 2更早的评论隐藏 2更早的评论
Walter Roberson 2023-2-26

### 采纳的回答

Michelle Hirsch 2022-4-28

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 个评论显示 7更早的评论隐藏 7更早的评论
Roberto Chang 2021-8-23
Hello all! do you know if this magical (awesome) feature can be done in Z axis for bar3?

### 更多回答（10 个）

line([x x], [y1 y2]); is the easy command;
##### 4 个评论显示 3更早的评论隐藏 3更早的评论
Genial

carolina franco 2017-10-26

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 个评论显示 3更早的评论隐藏 3更早的评论
Thank you so much, works perfect!!

Mark 2013-3-12

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 个评论显示 -1更早的评论隐藏 -1更早的评论

Steven Lord 2018-11-1
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 个评论显示 无隐藏 无
Gary Bikini 2019-4-26

the cyclist 2011-2-25
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 个评论显示 -1更早的评论隐藏 -1更早的评论

James 2014-3-28

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 个评论显示 4更早的评论隐藏 4更早的评论
Moved: DGM 2023-2-25
Now it makes sense to me! Thank you a lot!

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 个评论显示 1更早的评论隐藏 1更早的评论
Thanks!

Julian Williams 2019-2-9
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 个评论显示 -1更早的评论隐藏 -1更早的评论

Guy Cohen 2022-11-22
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 个评论显示 1更早的评论隐藏 1更早的评论
Guy Cohen 2022-11-22

Jos (10584) 2014-7-8
You might also be interested in GRIDXY on the File Exchange:

### 类别

Find more on Labels and 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!

Translated by