
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
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:
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:
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:
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 pgfplots
manual:
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 calc
biblioteca é efetivamente o mesmo no que diz respeito a isso.
Para fazer a transformação de coordenadas relativas, use axis direction cs
em 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}