¿Cómo puedo agregar/traducir puntos en el eje cs?

¿Cómo puedo agregar/traducir puntos en el eje cs?

Parece que no tengo problemas para colocar una coordenada en el sistema de coordenadas del eje, y la traducción en la dirección x también parece funcionar como se esperaba. Pero tan pronto como intento traducir en la dirección y, el resultado me desconcierta:

\documentclass{article}
    \usepackage{pgfplots}
    \usetikzlibrary{calc}
\begin{document}
    \begin{tikzpicture}
        \begin{axis}[grid=major,]
            \addplot plot coordinates{(1800,2.14) (1860,2.18)};
            \coordinate (bottomLeft) at (axis cs:1800,2.14);
            \coordinate (bottomRight) at ($(bottomLeft) + (30,0)$);
            \draw (bottomLeft) -- (bottomRight);
            \coordinate (topLeft) at ($(bottomLeft) + (0,0.02)$);
            \coordinate (topRight) at ($(topLeft) + (20,0)$);
            \draw[red,thick] (topLeft) -- (topRight);
        \end{axis}
    \end{tikzpicture}
\end{document}

genera

uno

y muestra que traduje en la dirección x ambas veces, pero la traducción y por (0,0.02) no se calcula como esperaba: quería una coordenada en (1800,2.16). Puedes saltar al final ahora a menos que quieras ver mi solución de problemas que no funcionó.

Descubrí que se está realizando un cálculo con

\documentclass{article}
    \usepackage{pgfplots}
    \usetikzlibrary{calc}
\begin{document}
    \begin{tikzpicture}
        \begin{axis}[grid=major,]
            \addplot plot coordinates{(1800,2.14) (1860,2.18)};
            \coordinate (bottomLeft) at (axis cs:1800,2.14);
            \draw[purple] ($(bottomLeft) + (0,0.2)$) circle (0.3cm);
            \filldraw[purple] ($(bottomLeft) + (0,10)$) circle (0.3cm);
        \end{axis}
    \end{tikzpicture}
\end{document}

porque pude trasladar en la dirección y; simplemente no parece trasladarse en el eje cs de la misma manera que lo haría en la dirección x:

dos

El círculo abierto no parecía trasladado en absoluto, pero tras un examen más detenido, obtuve el círculo relleno para trasladarlo (una distancia aparentemente no relacionada con el eje cs). Pensé que tal vez el eje y se manejaría de manera diferente que el eje x, así que intenté especificar el eje cs nuevamente:

\documentclass{article}
    \usepackage{pgfplots}
    \usetikzlibrary{calc}
\begin{document}
    \begin{tikzpicture}
        \begin{axis}[grid=major,]
            \addplot plot coordinates{(600,1) (1800,2.14) (1860,2.18)};
            \coordinate (bottomLeft) at (axis cs:1800,2.14);
            \coordinate (test) at ($(bottomLeft) + (axis cs:0,0.2)$);
            \draw[thick,purple] (test) circle (0.3cm);
            \draw[thick] (bottomLeft) -- (test);
        \end{axis}
    \end{tikzpicture}
\end{document}

pero cambiar la escala (cambiando el punto inferior izquierdo) muestra que (prueba) no permanece en el mismo lugar en relación con el eje cs:

tresA tresb

Intenté especificar el eje cs para todo el cálculo y con diferentes ubicaciones de corchetes, pero ninguno se compiló.

\documentclass{article}
    \usepackage{pgfplots}
    \usetikzlibrary{calc}
\begin{document}
    \begin{tikzpicture}
        \begin{axis}[grid=major,]
            \addplot plot coordinates{(800,1) (1800,2.14) (1860,2.18)};
            \coordinate (bottomLeft) at (axis cs:1800,2.14);
            %\coordinate (test) at (axis cs:$(bottomLeft) + (0,0.2)$);%didn't compile
            %\coordinate (test) at (axis cs:{$(bottomLeft) + (0,0.2)$});%didn't compile
            %\coordinate (test) at (axis cs:$(bottomLeft) + {(0,0.2)}$);%didn't compile
            %\coordinate (test) at (axis cs:${(bottomLeft) + (0,0.2)}$);%didn't compile
            \coordinate (translation) at (axis cs:0,0.2);
            \coordinate (test) at ($(bottomLeft) + (translation)$);
            \draw[thick,purple] (test) circle (0.3cm);
            \draw[thick] (bottomLeft) -- (test);
        \end{axis}
    \end{tikzpicture}
\end{document}

Cuando intenté crear ambas coordenadas antes del cálculo, (prueba) todavía no parece moverse con el eje cs:

cuatroA cuatroB

¿Alguien sabe cómo puedo calcular una ubicación de coordenadas utilizando otras dos coordenadas que se han definido en el sistema de coordenadas del eje?

Respuesta1

Como se indica en el pgfplotsmanual:

Como se indica en la documentación de axis cs, agregar dos coordenadas mediante el ++operador TikZ1puede tener efectos inesperados. La forma correcta de ++realizar las operaciones es axis direction cs.

1Si bien no lo estás usando estrictamente ++aquí, +desde la calcbiblioteca es efectivamente lo mismo en lo que a esto se refiere.

Para realizar una transformación de coordenadas relativas, utilice axis direction csen lugar de axis cs:

\documentclass{standalone}
    \usepackage{pgfplots}
    \pgfplotsset{compat=1.12}
    \usetikzlibrary{calc}
\begin{document}
    \begin{tikzpicture}
        \begin{axis}[grid=major,]
            \addplot plot coordinates{(1800,2.14) (1860,2.18)};
            \coordinate (bottomLeft) at (axis cs:1800,2.14);
            \coordinate (bottomRight) at ($(bottomLeft) + (axis direction cs:30,0)$);
            \draw (bottomLeft) -- (bottomRight);
            \coordinate (topLeft) at ($(bottomLeft) + (axis direction cs:0,0.02)$);
            \coordinate (topRight) at ($(topLeft) + (axis direction cs:20,0)$);
            \draw[red,thick] (topLeft) -- (topRight);
        \end{axis}
    \end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

información relacionada