如何在绘图中添加零线?

如何在绘图中添加零线?

我经常需要绘制一条穿过轴原点的水平线或垂直线,该线跨越绘图区域的整个宽度或高度。我不想使用axis lines=middle,因为刻度标签会使绘图区域变得杂乱。到目前为止,我一直在使用类似的方法\addplot [black, no markers] coordinates (-5,0) (5,0);来绘制水平线,但这种方法感觉不对,而且不太灵活:如果我更改轴范围,线条可能会太短,我必须明确设置xminxmax,否则线条会影响绘图限制。

添加一条穿过某个点(通常是轴原点)并跨越整个图高度/宽度的垂直线或水平线的正确方法是什么?

\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}

答案1

pgfplots将轴限制信息存储在xmin,ymin,xmax,xmin键中(Jake 提醒说早期版本并非如此),我们可以通过\pgfkeysvalueof{}命令访问这些键值。

这样做的好处是坐标会捕捉到原点的位置,更重要的是,如果原点在特定图中不可见,它不会干扰边界框。如果必须经常这样做,可以创建一个样式,将附加命令放入

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});
}

当轴处理完成时,这会将这些命令添加到指令列表中。

该方法的缺点是它不适用于对数图。在这种情况下,您可以使用

\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});

画出线条。

\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}

在此处输入图片描述

答案2

我使用额外的滴答机制来实现这一点:

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

这样会生成一条相对“浅”的线条,且采用标准设置:在我的图中,适当的样式可以引导视线,但又不会太过沉重。我猜想,可以通过正确的样式选择使用类似的方法来创建彩色线条。

答案3

在轴内绘制一条线:

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

答案4

另一种方法是在主情节后添加新情节:

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

  table[row sep=crcr]{%

0.0  0\\\

1  0\\\

100  0\\\

};

根据您自己的数据选择 x 轴值。

相关内容