TransWikia.com

How can I add a zero line to a plot?

TeX - LaTeX Asked on May 19, 2021

I frequently need to draw a horizontal or vertical line passing through the axis origin that spans the entire width or height of my plot area. I don’t want to use axis lines=middle, because the tick labels clutter up the plot area. So far, I’ve been using something like addplot [black, no markers] coordinates (-5,0) (5,0); to draw a horizontal line, but the approach doesn’t feel right, and it’s not very flexible: If I change my axis range, the line might be too short, and I have to explicitly set xmin and xmax because otherwise the line influences the plot limits.

What’s the proper way to add a vertical or horizontal line passing through a certain point (typically the axis origin) that spans the entire height/width of a plot?

documentclass{article}
usepackage{pgfplots}
begin{document}
begin{tikzpicture}
begin{axis}[
    xmin=-6,xmax=6
]
addplot {rand};
addplot [red, no markers] coordinates {(-7,0) (7,0)};
end{axis}
end{tikzpicture}
end{document}

4 Answers

pgfplots stores the axis limit information in xmin,ymin,xmax,xmin keys (Jake reminded that this was not the case in the earlier versions) and we can access those key values via pgfkeysvalueof{} command.

The advantage of this is that the coordinates snap to the location of the origin and more importantly it does not disturb the bounding box if the origin is not visible in the particular plots. If this has to be done frequently, one can create a style where the additional commands goes into the

after end axis/.append code={
   draw[ultra thin] (axis cs:pgfkeysvalueof{/pgfplots/xmin},0) -- (axis cs:pgfkeysvalueof{/pgfplots/xmax},0);
    draw[ultra thin] (axis cs:0,pgfkeysvalueof{/pgfplots/ymin}) -- (axis cs:0,pgfkeysvalueof{/pgfplots/ymax});
}

This would add these commands to the instruction list when the axis processing is finished.

The disadvantage of this method is that it does not work with logarithmic plots. In that case, you can use

draw ({rel axis cs:0,0}|-{axis cs:0,0}) -- ({rel axis cs:1,0}|-{axis cs:0,0});
draw ({rel axis cs:0,0}-|{axis cs:0,0}) -- ({rel axis cs:0,1}-|{axis cs:0,0});

to draw the lines.

documentclass{article}
usepackage{pgfplots}
begin{document}
begin{tikzpicture}
begin{axis}
addplot {rand};
draw[ultra thin] (axis cs:pgfkeysvalueof{/pgfplots/xmin},0) -- (axis cs:pgfkeysvalueof{/pgfplots/xmax},0);
draw[ultra thin] (axis cs:0,pgfkeysvalueof{/pgfplots/ymin}) -- (axis cs:0,pgfkeysvalueof{/pgfplots/ymax});
end{axis}
end{tikzpicture}
end{document}

enter image description here

Correct answer by percusse on May 19, 2021

I do this using the extra ticks mechanism:

  begin{axis}
    [
      extra y ticks       = 0,
      extra y tick labels = ,
      extra y tick style  = { grid = major },
      ...

This generates a relatively 'light' line with the standard settings: in my plots the appropriate style is something which is a guide to the eye but not overly heavily. I'd imagine that a similar approach can be used to create coloured lines by correct choice of style.

Answered by Joseph Wright on May 19, 2021

Within the axis just plot a line:

addplot[color=red] coordinates {(-6,0) (6,0)};

Answered by fuzzifikation on May 19, 2021

Another method is to add a new plot after the main plots:

addplot [color=gray, dashed,line width=0.4pt]

  table[row sep=crcr]{%

0.0  0

1  0

100  0

};

pick x-axis values based on your own data.

Answered by Ajay Singh on May 19, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP