Como posso adicionar/traduzir pontos no eixo cs?

Como posso adicionar/traduzir pontos no eixo cs?

Parece que não tenho problemas em colocar uma coordenada no sistema de coordenadas do eixo, e a tradução na direção x também parece funcionar conforme o esperado. Mas assim que tento traduzir na direção y, fico intrigado com o resultado:

\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}

gera

um

e mostra que traduzi na direção x ambas as vezes, mas a tradução de y por (0,0,02) não é calculada como eu esperava - eu queria uma coordenada em (1800,2,16). Você pode pular para o final agora, a menos que queira ver minha solução de problemas que não funcionou.

Eu descobri que um cálculo está acontecendo com

\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 consegui traduzir na direção y - simplesmente não parece estar traduzindo no eixo cs da mesma maneira que faria na direção x:

dois

O círculo aberto não parecia traduzido, mas após um exame mais detalhado, consegui traduzir o círculo preenchido (uma distância aparentemente não relacionada ao eixo cs). Achei que talvez o eixo y fosse tratado de maneira diferente do eixo x, então tentei especificar o eixo cs novamente:

\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}

mas mudar a escala (alterando o ponto inferior esquerdo) mostra que (teste) não fica no mesmo lugar em relação ao eixo cs:

trêsA trêsB

Tentei especificar o eixo cs para todo o cálculo e com diferentes localizações de colchetes, mas nenhum deles foi compilado.

\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}

Quando tentei criar ambas as coordenadas antes do cálculo, (teste) ainda não parece se mover com o eixo cs:

quatroA quatroB

Alguém sabe como posso calcular uma localização de coordenadas usando duas outras coordenadas que foram definidas no sistema de coordenadas do eixo?

Responder1

Conforme observado no pgfplotsmanual:

Conforme observado na documentação do axis cs, adicionando duas coordenadas por meio do ++operador TikZ1pode ter efeitos inesperados. A maneira correta de ++operações é axis direction cs.

1Embora você não esteja usando estritamente ++aqui, +da calcbiblioteca é efetivamente o mesmo no que diz respeito a isso.

Para fazer a transformação de coordenadas relativas, use axis direction csem vez 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}

insira a descrição da imagem aqui

informação relacionada