在 pgfplot 的 ylabel 中使用 \ref

在 pgfplot 的 ylabel 中使用 \ref

当我使用\label\ref区分两个 y 轴时\ref,在将其与标签的其余部分一起旋转后,绘制的标记不再在线上(见下面的示例)。有什么想法吗?

\documentclass{article}

\usepackage{pgfplots}

\begin{document}
  \begin{tikzpicture}
    \begin{axis}[axis y line*=left, scale only axis,
                 ylabel={estimation 2 \ref{pgf:allsamples}}]
      \addplot[blue,mark=+] table {data2.csv};
      \label{pgf:allsamples}
    \end{axis}
    \begin{axis}[axis y line*=right, scale only axis,
             ylabel={estimation 1 \ref{pgf:swingvotes}}, ylabel near ticks]
      \addplot[red,mark=x] table {data1.csv};
      \label{pgf:swingvotes}
    \end{axis}
  \end{tikzpicture}
\end{document}

ref 未按预期工作

答案1

pgfplots 确实存在一个错误:该\ref命令检查是否“它是从 tikz 图片中调用的”。但这个检查是有缺陷的,因为它从 tikzpicture 内部调用,但 tikzpicture 已被中断以显示节点。

由于该错误,标签发生了意外的位移。

在该错误被修复之前,您可以使用以下解决方法:

\documentclass{article}

\usepackage{pgfplots}

\def\fixcheck{%
    \def\tikzifinpicture##1##2{##2}%
}%

\begin{document}
  \begin{tikzpicture}
    \begin{axis}[axis y line*=left, scale only axis,
                 ylabel={\fixcheck estimation 2 \ref{pgf:allsamples}}]
      \addplot[blue,mark=+] {x+5};
      \label{pgf:allsamples}
    \end{axis}
    \begin{axis}[axis y line*=right, scale only axis,
             ylabel={\fixcheck estimation 1 \ref{pgf:swingvotes}}, ylabel near ticks]
      \addplot[red,mark=x] {x};
      \label{pgf:swingvotes}
    \end{axis}
  \end{tikzpicture}
\end{document}

在所有标签中,它都会添加\fixcheck宏,这将导致检查返回“false”。在这种情况下,\ref将添加一个临时的 tikzpicture。

相关内容