如何在 PGFplots 中指定轴的名称路径

如何在 PGFplots 中指定轴的名称路径

当我使用 {axis} 环境时,轴会自动绘制,因此我无法为它们指定名称?我希望能够计算与轴的交点,如下所示PGFplot 中的交叉点。有没有办法为这些轴指定一个名称?

一个解决方案是重绘轴,draw=none然后为该路径指定一个名称,但我想知道是否有更好的方法。像这样的东西xaxis name path=会很理想吗?

有一个every axis键,但也许我可以将它附加到那里,但是我如何为 x 轴和 y 轴指定不同的名称?

更新我的问题的目的是找到与线条的交点x=0y=0而不是自动绘制的方框边框)。以下是 MWE 的尝试:

\documentclass{standalone}
\usepackage{pgfplots}
\usetikzlibrary{intersections}

\pgfkeys{/pgfplots/Linear Axis Style/.style={
        clip=true,
        minor tick num=0,
        axis y line=center,
        axis x line=middle, 
        axis on top=true,
        x axis line style={name path=XAxisLine},
        y axis line style={name path=YAxisLine}
    }
}

\begin{document}

\newcommand*{\ShowIntersection}[2]{
\fill 
    [name intersections={of=#1 and #2, name=i, total=\t}] 
    [red, opacity=1, every node/.style={black, opacity=1}] 
    \foreach \s in {1,...,\t}{(i-\s) circle (2pt)
        node [above right] {\s}};
}

\begin{tikzpicture}
\begin{axis}[Linear Axis Style,
    xmin=-1.5, xmax=1.5,
    ymin=-1, ymax=3,
    ]

\addplot[name path global=a, mark=none, domain=-2.5:2.5, thick]%
    ({x},{x*x-0.5});%

%\ShowIntersection{a}{XAxisLine}% Do not work
%\ShowIntersection{a}{YAxisLine}

\end{axis} 
\end{tikzpicture}
\end{document}

答案1

最简单的做法是使用选项axis(在这种情况下x axis line style={name path=<name>}您不需要使用name path global,因为轴在与所有其他图形对象相同的范围内绘制):

\documentclass{standalone}
\usepackage{pgfplots}
\usetikzlibrary{intersections}
\begin{document}

\newcommand*{\ShowIntersection}[2]{
\fill 
    [name intersections={of=#1 and #2, name=i, total=\t}] 
    [red, opacity=1, every node/.style={black, opacity=1}] 
    \foreach \s in {1,...,\t}{(i-\s) circle (2pt)
        node [above right] {\s}};
}

\begin{tikzpicture}
\begin{axis}[xmin=-1.5, xmax=1.5,
    ymin=1, ymax=3,
    x axis line style={name path=AxisLine}]

\addplot[name path global=a, mark=none, domain=-2.5:2.5, thick]%
    ({x},{x*x});%
\ShowIntersection{a}{AxisLine}

\end{axis} 
\end{tikzpicture}
\end{document}

x 轴线样式=名称路径

但是,这并不理想:这会找到与所有边框的交点,而不仅仅是 x 轴。这是因为默认情况下,边框仅使用一条路径绘制。还要注意,如果您使用axis line style而不是x axis line style,则会找到两次交点,因为axis line style将其选项应用于x axis line styley axis line style,然后又将它们都应用于边框路径,因此您最终会得到两个name path global选项。

要修复此问题,可以尝试使用选项separate axis lines。在这种情况下,x axis line style={name path=<name>}必须更改为,x axis line style={every path/.style={name path=<name>}}因为选项被传递给范围而不是路径。

不幸的是,在我们的示例中找不到交点。这是因为使用 时separate axis lines,底部和顶部轴线按该顺序绘制,使用两个不同的路径但相同的选项。只有顶部轴(或 y 轴的情况下的右轴)最终被分配name

解决这个问题的一种方法是使用选项

axis lines=left,
x axis line style={every path/.style={name path=AxisLine}}

这将只绘制左轴和底轴,从而导致

轴线=左

这可能对您的应用程序来说已经足够好了。如果您确实需要箱形图并且能够找到仅与底部 x 轴的交点,则必须修补文件中的代码pgfplots.code.tex

相关内容