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, \draw
pero 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}
Respuesta1
Nosotros name
, axis
para poder acceder a él fuera del axis
entorno.
Luego, trazamos una línea entre algunos puntos clave del mismo.
La salida
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 cs
a axis description cs
como se sugiere en los comentarios.
Puedes usar el axis description cs
sistema 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}
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 axis
entorno; 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.