当将标签放置在图上方时,“我无法装饰空路径”

当将标签放置在图上方时,“我无法装饰空路径”

我正在尝试使用 tikz 和 pgfplots 在曲线上方放置标签。下面的解决方案产生了预期的输出,但只有当我在编译期间忽略错误消息时才会出现:

Package PGF Error: I cannot decorate an empty path. [  \end{axis}]

这是什么意思?我该如何修复它?显然有一条可见的路径,当我跳过错误时,它确实得到了修饰。以下示例:

\documentclass{article}
\usepackage{tikz}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\usetikzlibrary{decorations.markings}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9} 

\begin{document}

\pgfmathdeclarefunction{poiss}{1}{%
  \pgfmathparse{(#1^x)*exp(-#1)/(x!)}%
}

\begin{tikzpicture}[node distance=10mm]
    \begin{axis}[
      compat=newest,
      ymax=0.16,
      xlabel=$k$,
      ylabel=$P(k)$,
      domain=0:25,samples at = {0,...,25},
      label/.style 2 args={%
        postaction={ decorate,
           decoration={ markings, mark=at position #1 with \node#2;}
          }}%
      ]
      \addplot[red,mark=o,%
               label={0.45}%
                     {[above]{$\lambda=10$}}%
        ] {poiss(10)};
  \end{axis}
\end{tikzpicture}

\end{document}

答案1

问题是 似乎mark与 不兼容decorate。如果您绘制两次图,一次带有标记,一次带有装饰,它就会起作用。

(奖励:这还展示了如何向[]作为装饰放置的节点添加参数;我遇到了困难,因为它无法解析[above,yshift=-4pt]。您可以在外部定义样式,如下所示。或者您可以说,但这似乎仅在节点的参数中\node [above][blue]没有,和时才有效。)=

\documentclass{article}
\usepackage{tikz}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\usetikzlibrary{decorations.markings}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9} 

\begin{document}

\pgfmathdeclarefunction{poiss}{1}{%
  \pgfmathparse{(#1^x)*exp(-#1)/(x!)}%
}

\tikzstyle{higherabove}+=[above,yshift=4pt]

\begin{tikzpicture}[node distance=10mm]
    \begin{axis}[
      compat=newest,
      ymax=0.16,
      xlabel=$k$,
      ylabel=$P(k)$,
      domain=0:25,samples at = {0,...,25},
      mylabel/.style n args={2}{%
        postaction={decorate},%
        decoration={markings,%
                    mark=at position #1 with \node [higherabove] {#2}; }%
      }%
      ]

      \addplot[red,mark=o] {poiss(10)};
      \addplot[red,mylabel={0.45}{hello} ] {poiss(10)};

  \end{axis}
\end{tikzpicture}

\end{document}

答案2

PGFPlots 提供了一种本机方法来向图添加标签,而无需借助于库decorations:只需添加node [pos=..., <options>] {text};\addplot命令中:

\documentclass{article}
\usepackage{pgfplots}

\begin{document}

\pgfmathdeclarefunction{poiss}{1}{%
  \pgfmathparse{(#1^x)*exp(-#1)/(x!)}%
}


\begin{tikzpicture}
    \begin{axis}[
      compat=newest,
      ymax=0.16,
      xlabel=$k$,
      ylabel=$P(k)$,
      domain=0:25,samples at = {0,...,25}
      ]

      \addplot[red, mark=o] {poiss(10)} node [pos=0.4, above=4pt] {hello};

  \end{axis}
\end{tikzpicture}

\end{document}

相关内容