Desenhe setas fora da área de conteúdo do TikZ

Desenhe setas fora da área de conteúdo do TikZ

Eu tenho um gráfico tikz bastante padrão. Para esclarecer que valores baixos no eixo y são na verdade mais rápidos/melhores, quero desenhar uma seta adicional fora da área de plotagem, conforme mostrado no anexo. Encontrei várias maneiras de desenhar, \drawmas todas funcionam apenas dentro da área de conteúdo do gráfico - como posso desenhar fora dessa área?

Aqui está um MWE de como eu crio meu enredo no momento:

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

insira a descrição da imagem aqui

Responder1

Nós nameo axis, para podermos acessá-lo fora do axisambiente.

Em seguida, traçamos uma linha entre alguns pontos-chave dele.

A saída

insira a descrição da imagem aqui

O código

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

Saúde,

Responder2

EDIT: Alterado rel axis cspara axis description csconforme sugerido nos comentários.

Você pode usar o axis description cssistema de coordenadas para coisas como esta:

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

Imagem da resposta O ponto (axis description cs:0, 1)é o ponto superior esquerdo, (axis description cs:0, 0)é o ponto inferior esquerdo. Ambos os pontos são deslocados 2cm(arbitrariamente, escolha ao seu gosto). Observe que você deve desativar o recorte no axisambiente, caso contrário, todas as coisas desenhadas fora do eixo não ficarão visíveis.

Sempre tenho a sensação de que coisas assim podem ser resolvidas melhor. Na minha opinião, você deve sempre escolher suas unidades e coisas que deseja mostrar para refletir seu ponto de vista. Nesse caso, talvez fosse possível usar o inverso do tempo (talvez frequência) para traçar os dados? Não sei o que você está mostrando, mas lembre-se de que é melhor (na minha opinião) resolver as coisas não com truques técnicos/técnicos inteligentes (adicionando uma anotação personalizada) do que usando o método de visualização correto.

informação relacionada