Как добавить/переместить точки по оси CS?

Как добавить/переместить точки по оси CS?

У меня, похоже, нет проблем с размещением координаты в системе координат оси, и перемещение в направлении 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}

введите описание изображения здесь

Связанный контент