
У меня, похоже, нет проблем с размещением координаты в системе координат оси, и перемещение в направлении x тоже работает так, как и ожидалось. Но как только я пытаюсь переместить в направлении y, я озадачен результатом:
\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}
генерирует
и показывает, что я переместил в направлении x оба раза, но перемещение y на (0,0.02) не вычисляется так, как я ожидал - я хотел координату в (1800,2.16). Вы можете перейти к концу, если вы не хотите увидеть мое устранение неполадок, которые не сработали.
Я обнаружил, что происходит вычисление с
\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}
потому что я смог переместиться в направлении y — просто, похоже, перемещение по оси cs не происходит так же, как в направлении x:
Открытый круг не выглядел перемещенным вообще, но при более внимательном рассмотрении я заставил заполненный круг перемещаться (расстояние, казалось бы, не связанное с осью cs). Я подумал, что, возможно, ось y будет обрабатываться иначе, чем ось x, поэтому я попытался снова указать ось cs:
\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}
но изменение масштаба (путем изменения нижней левой точки) показывает, что (тест) не остается на том же месте относительно оси cs:
Я пробовал указать ось cs для всего расчета и с другим расположением скобок, но ни один из них даже не скомпилировался.
\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}
Когда я попытался создать обе координаты до вычисления, (тест) все равно не двигался вместе с осью cs:
Кто-нибудь знает, как можно вычислить координаты местоположения, используя две другие координаты, которые были определены в осевой системе координат?
решение1
Как отмечено в pgfplots
руководстве:
Как отмечено в документации
axis cs
, сложение двух координат с помощью++
оператора TikZ1может иметь неожиданные эффекты. Правильный способ для++
операций —axis direction cs
.
1Хотя вы не используете ++
здесь строго, +
из calc
библиотеки фактически то же самое, что касается этого.
Чтобы выполнить относительное преобразование координат, используйте axis direction cs
вместо 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}