PGFplots:坐标标签的全局设置

PGFplots:坐标标签的全局设置

以下代码在引入该foreach部分时会导致错误。所以,我想知道其中有什么问题。

\documentclass[border=1cm]{standalone}
\usepackage{pgfplots}

\pgfplotsset{compat=newest,
poles/.style= { only marks, mark=x, mark size = 1ex, thick},
zeros/.style= { only marks, mark=o, mark size = 1ex, thick }
}

\begin{document} 
\begin{tikzpicture}
    \begin{axis}[axis lines=middle,
    xmax = 1, xmin = -8,
    xtick={1,...,-9},
    ymax = 2, ymin = -2,
    ytick={-2,...,2},
    ]
        \addplot[poles] coordinates {(-2,2) (-2,-2) (-8,0)};
        \addplot[zeros] coordinates {(-4,0)};
        \foreach \x/\y in {-2/2 , -2/-2 , -8/0 , -4/0 }{
        \node[label={180:{(\x,\y)}},inner sep=2pt] at (axis cs:\x,\y) {};
     }
    \end{axis}
\end{tikzpicture}
\end{document}

此外,如何删除foreach代码并将其替换为内部坐标标记的全局设置,pgfplotsset并使用角度放置的局部输入选项代替180我的代码中提供的固定角度?

答案1

是的,这是 pgfplots 中一个众所周知的扩展问题。根据人们的看法,人们可能会认为你的问题与导致这个答案。如果您觉得这是重复的,我很乐意删除此答案。否则就这样做

\documentclass[border=1cm]{standalone}
\usepackage{pgfplots}

\pgfplotsset{compat=newest,
poles/.style= { only marks, mark=x, mark size = 1ex, thick},
zeros/.style= { only marks, mark=o, mark size = 1ex, thick }
}

\begin{document} 
\begin{tikzpicture}
    \begin{axis}[axis lines=middle,clip=false,%<-added
    xmax = 1, xmin = -8,
    xtick={1,...,-9},
    ymax = 2, ymin = -2,
    ytick={-2,...,2},
    ]
        \addplot[poles] coordinates {(-2,2) (-2,-2) (-8,0)};
        \addplot[zeros] coordinates {(-4,0)};
        \foreach \x/\y/\z in {-2/2/-90 , -2/-2/90 , -8/0/90 , -4/0/90 }{
        \edef\temp{\noexpand\node[label={\z:{(\x,\y)}},inner sep=2pt] at (axis
        cs:\x,\y) {};}
        \temp
     }
    \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

为什么这是必要的? pgfplots 在实际排版之前会运行一个“调查阶段”。在这个阶段,它可以在某种程度上忘记循环内的内容,因为还有另一个扩展魔法在发生。出于这个原因,pgfplots 带有自己的循环机制,如\pgfplotsinvokeforeach\pgfplotsforeachungrouped,有关更多详细信息,请参阅手册第 8.1 节。我个人的底线是先尝试上述技巧,如果它有效,那么我就没问题了。;-)

附录:这是一个丑陋的版本,允许您通过 point meta 添加锚点。(我现在没有太多时间。)它可以工作,但您只能在0和之间放置锚点360,也就是说,说-90不起作用。而且有一个空图。原因是我现在没有时间去找出如何进行更好的\pgfplotspointmetatransformed转换。

\documentclass[border=1cm]{standalone}
\usepackage{pgfplots}

\pgfplotsset{compat=newest,
poles/.style= { scatter,
        scatter src=explicit, only marks, mark=x, mark size = 1ex, thick},
zeros/.style= { scatter,
        scatter src=explicit, only marks, mark=o, mark size = 1ex, thick }
}
\newcommand\myparse[1]{\pgfmathparse{#1}\typeout{\pgfmathresult}}
\begin{document} 
\begin{tikzpicture}
    \begin{axis}[axis lines=middle,clip=false,%<-added
    xmax = 1, xmin = -8,
    xtick={1,...,-9},
    ymax = 2, ymin = -2,
    ytick={-2,...,2},
    visualization depends on=x \as \rawx,
    visualization depends on=y \as \rawy,
    visualization depends on=\pgfplotspointmetatransformed \as \mymeta,
    nodes near coords style={
                anchor=(\pgfplotspointmetatransformed/1000)*360
            },
    nodes near coords={(\pgfmathprintnumber{\rawx},\pgfmathprintnumber{\rawy})},
    ]
        \addplot[poles,forget plot,opacity=0] coordinates {(0,0)[0] (0,0)[360]};
        \addplot[poles] coordinates {(-2,2)[90] (-2,-2)[270] (-8,0)[0]};
        \addplot[zeros] coordinates {(-4,0)[270]};
    \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容