I want to add a x-axis line at 0 to a Matlab figure so that I can compare my data to see if it is positive or negative when saving the figures to a jpg. What is the best way to do this? I know you can use line()
but it just seems cumbersome because you need to specify the x and the y ranges. Is there an easier way?
Asked
Active
Viewed 5.9k times
16

SecretAgentMan
- 2,856
- 7
- 21
- 41

O_O
- 4,397
- 18
- 54
- 69
-
See https://stackoverflow.com/q/17798093/7328782 for a similar question about vertical lines. – Cris Luengo Mar 26 '19 at 12:55
-
Possible duplicate of [How to draw horizontal and vertical lines in MATLAB?](https://stackoverflow.com/questions/28334660/how-to-draw-horizontal-and-vertical-lines-in-matlab) – SecretAgentMan Dec 17 '19 at 22:35
6 Answers
32
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');
The nice thing is that it internally implements a listener for the axes limits (handles change like pan, zoom, etc..). So the lines would appear to extend to infinity.

Amro
- 123,847
- 25
- 243
- 454
-
Looks like my version of Matlab 7.0.1 R14 SP1 gives me a segmentation violation when I run your code and I don't get the x-axis line. :( – O_O Nov 15 '11 at 01:04
-
2why the downvote, your version of [MATLAB](http://en.wikipedia.org/wiki/MATLAB#Release_history) is pretty old, and as it turns out doesn't run the above solution.. Plus as I mentioned, this is an undocumented feature – Amro Nov 15 '11 at 02:55
-
sorry, i didn't think it would do so. i tried to undo the upvote, but it caused the downvote instead. not very intuitive.. =/ now i can't do anything since the ans is locked until the post is edited and i don't have editing privileges. – O_O Nov 16 '11 at 01:24
-
-
14update: unfortunately the function was removed in R2014b (which introduced the new HG2 graphics system). – Amro Dec 11 '14 at 09:16
7
You could get this x range directly after the figure has been created. It goes a little something like this:
x=-2:5;
y=x.^2-1;
figure()
plot(x,y);
xlim = get(gca,'xlim'); %Get x range
hold on
plot([xlim(1) xlim(2)],[0 0],'k')
Note that if you do any manual zooming out in the figure, the line might have to be redrawn to go over the entire new x range.

Vidar
- 4,141
- 5
- 24
- 30
6
A vline
and hline
command like in GNU R would be great, but I could not find a shorter solution than
plot(1:10,sin(1:10));
line(xlim,[0 0],'Color','r')

Jonas Stein
- 6,826
- 7
- 40
- 72
6
I don't believe there is a built-in way that is more convenient. I use hline()
and vline()
from FileExchange, which work like a charm:

John Colby
- 22,169
- 4
- 57
- 69
1
- Draw your data by
plot()
command orstem()
. A figure window will open. - Then on the figure window, click on the [insert] command from the
menu bar, a drop-down menu will appear. - From this menu click on the [line] command, now the shape of the
cursor will change into a plus sign. - Now you can draw a line anywhere you want, either horizontal or
vertical or slanted. - You can change the properties of line by right clicking on the
line, a menu will appear from which you can choose your desires
properties. - If you want to have some ticks on the line then you can use add text option, and place text where ever you want.
- If you would like to have a code for your figure, click on [file]
menu and then click on [generatecode] option, a new text editor
window will open, you can save this code for further use. Good luck.

Jakob Runge
- 2,287
- 7
- 36
- 47

Mota Mota
- 53
- 1
- 5