当我使用 {axis} 环境时,轴会自动绘制,因此我无法为它们指定名称?我希望能够计算与轴的交点,如下所示PGFplot 中的交叉点。有没有办法为这些轴指定一个名称?
一个解决方案是重绘轴,draw=none
然后为该路径指定一个名称,但我想知道是否有更好的方法。像这样的东西xaxis name path=
会很理想吗?
有一个every axis
键,但也许我可以将它附加到那里,但是我如何为 x 轴和 y 轴指定不同的名称?
更新我的问题的目的是找到与线条的交点x=0
(y=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 轴。这是因为默认情况下,边框仅使用一条路径绘制。还要注意,如果您使用axis line style
而不是x axis line style
,则会找到两次交点,因为axis line style
将其选项应用于x axis line style
和y 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
。