
Когда я использую \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.