pgfplot addplot con coordenadas predefinidas

pgfplot addplot con coordenadas predefinidas

Tengo un montón de coordenadas predefinidas, donde quiero dibujar varias líneas en un gráfico reutilizando las coordenadas. Si cambio un valor de coordenadas, solo quiero cambiarlo una vez y no en varias listas de coordenadas. Por eso quiero hacer algo como lo siguiente.

\documentclass[tikz]{standalone}

\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.9}

\begin{document}
\begin{tikzpicture}

\begin{axis}
\coordinate (p1) at (1,1);
\coordinate (p2) at (2,2);
\addplot coordinates{(p1)(p2)};
\end{axis}

\end{tikzpicture}
\end{document}

Para generar algo que se parezca a esto

Pero aparentemente la vida no puede ser tan fácil, porque me sale el siguiente error

Runaway argument?
p1)(p2)\pgfplots@EOI \pgfplotsscanlinelengthcleanup 
\pgfplots@coord@stream@end 
\ETC.
Paragraph ended before \pgfplots@loop@next was complete.
<to be read again> 
               \par 
l.15 

También intenté definir las coordenadas fuera del entorno del eje, pero tampoco funcionó.

¿Alguna idea sobre cómo utilizar coordenadas predefinidas en una lista de coordenadas de \addplot?

Respuesta1

Como mencioné, esto probablemente se deba a que pgfplots retrasa sus expansiones. De esta manera es posible hacer zoom automáticamente en la región relevante y así sucesivamente. Por lo tanto no puedo ofrecerle una solución bonita. La mejor solución que pude producir es

\documentclass[tikz]{standalone}
\makeatletter
% from https://tex.stackexchange.com/q/56353/121799
\newcommand{\gettikzxy}[3]{%
  \tikz@scan@one@point\pgfutil@firstofone#1\relax
  \global\edef#2{\the\pgf@x}%
  \global\edef#3{\the\pgf@y}%
}
\newcommand{\gettikzcoordinates}[2]{%
  \tikz@scan@one@point\pgfutil@firstofone#1\relax
  \pgfmathsetmacro{\myx}{round(0.99626*\the\pgf@x/0.0283465)/1000}
  \pgfmathsetmacro{\myy}{round(0.99626*\the\pgf@y/0.0283465)/1000}
  \global\edef#2{(\myx,\myy)}%
}
\makeatother
\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.9}

\begin{document}
\begin{tikzpicture}
\coordinate (p1) at (1,1);
\coordinate (p2) at (2,2);
\begin{axis}
\gettikzcoordinates{(p1)}{\Pone}
\gettikzcoordinates{(p2)}{\Ptwo}
\addplot coordinates{\Pone\Ptwo};
\end{axis}
\end{tikzpicture}
\end{document}

Este código produce la trama deseada. Como puede comprobar, si mueve el \begin{axis}antes de las \coordinatedeclaraciones, obtendrá un error, esencialmente porque las coordenadas no se definieron cuando se necesitan. Muy a menudo puedes escapar usando \edef\temp{<something>}\temp, pero en esta situación solo quedé atrapado en bucles interminables. ( \gettikzxyNo es relevante aquí, solo quería indicar de dónde saqué la idea de cómo extraer las coordenadas).

información relacionada