У меня есть случайный гладкий рисунок (просто плавно соединяющиеся точки) и я хочу выделить точку между точками. Выделение должно происходить путем соединения точки на графике с ее координатой на оси x.
Вот MWE, который я хотел бы оставить как есть
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[ytick=\empty,xtick=\empty,
axis on top=false,xmin=0, xmax=10, ymin=0, ymax=5,
axis x line=left, axis y line=left, clip=false]
\node at (rel axis cs:1,0) [above, anchor=north west] {$x$};
\node at (rel axis cs:0,1) [above, anchor=west] {$y$};
\addplot[smooth] coordinates {
(0,0)
(2,3)
(5,1.2)
(5.8,4)
(8,3.8)
(10,3.5)
} coordinate [pos=.9] (prior) ;
\end{axis}
\end{tikzpicture}
\end{document}
Я хочу соединить координату prior
с осью x, используя линию, параллельную оси y. Я сделал так
\draw[dotted] (prior)-- (rel axis cs:0.9,0);
Однако по какой-то непонятной мне причине это не правильная координата (она немного правее). Теперь мне интересно, как мне оценить правильную координату? Функция строит диапазон от , 0:10
поэтому мои математические навыки подсказывают, что .9
это также должно быть .9
длиной оси x. Однако это, кажется, неверно. Есть ли у кого-нибудь идеи, какова правильная координата? Или еще проще: как мне соединить точку (предыдущую) с осью x кратчайшим путем?
Я попытался использовать решение, предложенное в ответе на этот вопрос:Гладкие графики pgfПроблема в том, что я не знаю координату Y предыдущей точки.
Для полноты картины вот вывод, который он производит (не обращайте внимания на разные метки осей)
решение1
Итак, вы ищете это?
Причина, по которой pos=0.9
не находится при x=0.9, заключается в том, что координата действительно находится на 90% длины линии. И поскольку в начале линии много "вверх и вниз" (т. е. при низких значениях x), эта часть линии "длиннее", чем часть в конце линии (т. е. при высоких значениях x), которая является почти горизонтальной прямой линией.
(Для полноты картины: если вы намеревались разместить узел в точке x=0,9 на линии, то в настоящее время это невозможно сделать напрямую, используя эту pos
функцию, но вТрекер PGFPlots. Но, конечно, это можно сделать и косвенно, например, используя intersections
библиотеку от TikZ.)
% used PGFPlots v1.14
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{
% use this `compat' level or higher so there is no need any more to prefix
% TikZ coordinates with `axis cs:'
compat=1.11,
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xtick=\empty,
ytick=\empty,
xmin=0,
xmax=10,
ymin=0,
ymax=5,
axis lines=center,
% (moved the axis labels here)
xlabel={$x$},
ylabel={$y$},
xlabel style={anchor=north west},
ylabel style={anchor=north east},
]
\addplot [smooth] coordinates {
(0,0)
(2,3)
(5,1.2)
(5.8,4)
(8,3.8)
(10,3.5)
}
coordinate [pos=.9] (prior)
;
% to draw a vertical line from `prior' down to the x axis use the `|-' operator and state an arbitrary x value, but 0 as y value
\draw [dotted] (prior) -- (prior |- 0,0);
\end{axis}
\end{tikzpicture}
\end{document}