Как соединить случайную точку на гладком графике с осью?

Как соединить случайную точку на гладком графике с осью?

У меня есть случайный гладкий рисунок (просто плавно соединяющиеся точки) и я хочу выделить точку между точками. Выделение должно происходить путем соединения точки на графике с ее координатой на оси 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}

изображение, показывающее результат кода выше

Связанный контент