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, \draw
mas 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}
Responder1
Nós name
o axis
, para podermos acessá-lo fora do axis
ambiente.
Em seguida, traçamos uma linha entre alguns pontos-chave dele.
A saída
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 cs
para axis description cs
conforme sugerido nos comentários.
Você pode usar o axis description cs
sistema 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}
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 axis
ambiente, 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.