pgfplotsinvokeforeach 仅被调用两次

pgfplotsinvokeforeach 仅被调用两次

我想用方程绘制曲线族坐标=c对于几个值C。我还希望每条曲线都标有C它对应于。

这是我的 MWE:

\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        xmin=-3.0,xmax=3.0,
        ymin=-3.0,ymax=3.0,
        axis x line=middle, 
        axis y line=middle,
        axis equal image,
        cycle list={blue}
        ]
        \pgfplotsinvokeforeach{-3.0,-2.5,...,-0.5,0.5,1.0,...,3.0}{
            \addplot+[domain=-3:-0.1,forget plot] {#1/x};
            \addplot+[domain=0.1:3] {#1/x} node[pos=0.5] {$#1$};
        }
    \end{axis}
\end{tikzpicture}
\end{document}

我绘制了每条曲线,但只有两条曲线被标记:

示例代码输出

我如何标记所有十二条曲线?

答案1

为了更好地控制节点的位置,你可以调整我的方法在 pgfplots 中标记图,无需手动输入坐标。例如,您可以定义一条曲线路径并将所有标签放置在其绘图和路径的交叉点处:

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{intersections}

\pgfkeys{
    /pgfplots/linelabel/.style={
        name path global=labelpath,
        execute at end plot={
            \path [name path global = labelpositionline]
                (rel axis cs:0.85,0) to [bend left=45, looseness=1] (rel axis cs:0.85,1);
            \path [name intersections={of=labelpath and labelpositionline}] (intersection-1) node [font=\scriptsize] {#1};
        },
    }
}


\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        xmin=-3.0,xmax=3.0,
        ymin=-3.0,ymax=3.0,
        axis x line=middle, 
        axis y line=middle,
        axis equal image,
        cycle list={blue}
        ]
        \pgfplotsinvokeforeach{-3.0,-2.5,...,-0.5,0.5,1.0,...,3.0}{
            \addplot+[domain=-3:-0.1,forget plot] {#1/x};
            \addplot+[linelabel=#1,domain=0.1:3] {#1/x};
        }
    \end{axis}
\end{tikzpicture}
\end{document}

答案2

如果您使用不同的值pos,它们将可见:

\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        xmin=-3.0,xmax=3.0,
        ymin=-3.0,ymax=3.0,
        axis x line=middle, 
        axis y line=middle,
        axis equal image,
        cycle list={blue}
        ]
        \pgfplotsinvokeforeach{-3.0,-2.5,...,-0.5,0.5,1.0,...,3.0}{
            \addplot+[domain=-3:-0.1,forget plot] {#1/x};
            \addplot+[domain=0.1:3] {#1/x} node[pos=0.92] {$#1$};
        }
    \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

正如前几位评论者指出的那样,标签ymin放置在 pgfplots / keys定义的窗口外面ymax

我的解决方法是警告每个绘制函数的域,以便窗口外没有点。然后它就pos=0.5正好是我想要的。

    \pgfplotsinvokeforeach{-3.0,-2.5,...,-0.5,0.5,1.0,...,3.0}{
        \pgfmathsetmacro{\a}{abs(#1)/3}
        \addplot+[domain=-3:-\a,forget plot] {#1/x};
        \addplot+[domain=\a:3] {#1/x} node[black,fill=white,pos=0.5,sloped,inner sep=0pt] {$#1$};
    }

缺点是如果ymin或被改变,则需要更新ymax线路定义。因此这不是最佳选择,但输出还不错。\a

在此处输入图片描述

相关内容