Dibuja flechas fuera del área de contenido de TikZ

Dibuja flechas fuera del área de contenido de TikZ

Tengo una trama tikz bastante estándar. Para aclarar que los valores bajos en el eje y son en realidad más rápidos/mejores, quiero dibujar una flecha adicional fuera del área de trazado real, como se muestra en el archivo adjunto. Encontré varias formas de dibujar, \drawpero todas funcionan sólo dentro del área de contenido de la trama. ¿Cómo puedo dibujar fuera de esta área?

Aquí hay un MWE de cómo creo mi trama en este 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}

ingrese la descripción de la imagen aquí

Respuesta1

Nosotros name, axispara poder acceder a él fuera del axisentorno.

Luego, trazamos una línea entre algunos puntos clave del mismo.

La salida

ingrese la descripción de la imagen aquí

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

Salud,

Respuesta2

EDITAR: Cambiado rel axis csa axis description cscomo se sugiere en los comentarios.

Puedes usar el axis description cssistema de coordenadas para cosas 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}

Imagen de respuesta El punto (axis description cs:0, 1)es el punto superior izquierdo, (axis description cs:0, 0)es el punto inferior izquierdo. Ambos puntos se desplazan 2cm(arbitrario, elija a su gusto). Tenga en cuenta que debe desactivar el recorte en el axisentorno; de lo contrario, todo el material dibujado fuera del eje no será visible.

Siempre tengo la sensación de que este tipo de cosas se pueden solucionar mejor. En mi opinión, siempre debes elegir tus unidades y las cosas que quieres mostrar para reflejar tu punto. En este caso, ¿tal vez sería posible utilizar la inversa del tiempo (quizás la frecuencia) para trazar los datos? No sé lo que estás mostrando, pero ten en cuenta que es mejor (en mi opinión) resolver las cosas no mediante trucos técnicos o técnicos inteligentes (agregando una anotación personalizada) que utilizando el método de visualización correcto.

información relacionada