当我使用\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}
答案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。