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