Нарисуйте стрелки за пределами области содержимого TikZ

Нарисуйте стрелки за пределами области содержимого TikZ

У меня довольно стандартный график tikz. Чтобы прояснить, что низкие значения по оси y на самом деле быстрее/лучше, я хочу нарисовать дополнительную стрелку за пределами фактической области построения графика, как показано во вложении. Я нашел различные способы рисования с использованием , \drawно все они работают только в пределах области содержимого графика - как мне рисовать за пределами этой области?

Вот пример того, как я создаю свой сюжет в данный момент:

\documentclass[11pt,a4paper]{article}
\usepackage{pgfplots, pgfplotstable}    
\usepackage{tikz}

\begin{document}
\begin{figure}
\begin{tikzpicture}[scale=0.75]
         \pgfplotsset{grid style={dashed,gray}}
        \begin{axis}[
        xlabel={X}, 
        ylabel=time,
        xmin=0.8,
        xmax=1.0,
        ymin=1,     
        ymax=200,   
        xmajorgrids=true,
        ymajorgrids=true,
    ]      

\addplot+[
            black,
            mark options={fill= black},
            only marks,
            mark size=2,
            mark=square*,
        ] 
        coordinates {
            (0.805, 10)
            (0.85, 20)

        };



    \end{axis}
    \end{tikzpicture}   

\end{figure}

\end{document}

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

решение1

Мы name, axisчтобы иметь возможность доступа к нему вне axisокружающей среды.

Затем мы проводим линию между некоторыми ключевыми моментами.

Выход

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

Код

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{arrows}

\begin{document}
\begin{tikzpicture}[scale=0.75, >=stealth']
  \pgfplotsset{grid style={dashed,gray}}
  \begin{axis}
    [
      name=myGraph,
      xlabel={X}, 
      ylabel=time,
      xmin=0.8,
      xmax=1.0,
      ymin=1,     
      ymax=200,   
      xmajorgrids=true,
      ymajorgrids=true,
    ]      

    \addplot+
    [
      black,
      mark options={fill= black},
      only marks,
      mark size=2,
      mark=square*,
    ] 
    coordinates 
    {
      (0.805, 10)
      (0.85, 20)
    };
  \end{axis}

  \def\myShift{-2cm}
  \draw [red, very thick, ->] ([xshift=\myShift]myGraph.north west) -- ([xshift=\myShift]myGraph.south west) node [midway, rotate=90, fill=white, yshift=2pt] {faster} ;
  %\draw [red, very thick, ->] (myGraph.left of north west) -- (myGraph.left of south west) node [midway, rotate=90, fill=white, yshift=2pt] {faster} ; % an alternative way
\end{tikzpicture}
\end{document}

Ваше здоровье,

решение2

EDIT: Изменено rel axis csна axis description csто, что предложено в комментариях.

Вы можете использовать axis description csсистему координат для таких целей:

\documentclass{article}

\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
    \begin{axis}
        [
            grid style = {dashed, gray},
            xlabel={X}, 
            ylabel=time,
            xmin=0.8,
            xmax=1.0,
            ymin=1,     
            ymax=200,   
            xmajorgrids=true,
            ymajorgrids=true,
            clip = false % <--- Important
        ]      
        \addplot+
        [
            black,
            mark options={fill= black},
            only marks,
            mark size=2,
            mark=square*,
        ] 
        coordinates { (0.805, 10) (0.85, 20) };
        % add annotation here:
        \draw[red, ->] ([xshift = -2cm] axis description cs:0, 1) -- node[left] { Faster } ([xshift = -2cm] axis description cs:0, 0);
    \end{axis}
\end{tikzpicture}   
\end{document}

Изображение ответа Точка (axis description cs:0, 1)— верхняя левая точка, (axis description cs:0, 0)нижняя левая точка. Обе точки смещены на 2cm(произвольно, выбирайте по вкусу). Обратите внимание, что вам нужно отключить обрезку в окружении axis, иначе все, что нарисовано за пределами оси, не будет видно.

У меня всегда было чувство, что такие вещи можно решить лучше. По моему мнению, вы всегда должны выбирать единицы измерения и то, что вы хотите показать, чтобы отразить вашу точку зрения. В этом случае, может быть, можно было бы использовать обратную величину времени (возможно, частоту) для построения графика данных? Я не знаю, что вы показываете, но имейте в виду, что лучше (по моему мнению) решать вещи не с помощью хитрых технических трюков (добавление пользовательской аннотации), а с помощью правильного метода визуализации.

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