Plotpgf пропускает координаты+ каждый n-й

Plotpgf пропускает координаты+ каждый n-й

Каково ожидаемое поведение объединения координат пропуска и каждой n-ной команды в pgfplot. Используя следующий код, я ожидал получить график с точками (250, 30) и (300, 40) и другой график с точками (250, 14) и (300, 18).

Вместо этого первый график верен, а второй выдает только точку (300, 40), как будто эти два варианта не могут сочетаться друг с другом.

\usepackage{filecontents}
\begin{filecontents}{results.data}
Move Size Factor
A 250 30
B 250 14
C 250 10
A 300 40
B 300 18
C 300 7
\end{filecontents}

\begin{figure}[!ht]
    \centering
    \pgfplotsset{tick label style={font=\small}}
    \begin{tikzpicture}
    \begin{axis}[   scale only axis,    yticklabel style={inner sep=0pt, align=right, xshift=-0.1cm}    ]
    \addplot+[color=blue,only marks,mark=*,mark options=solid, mark options={scale=0.4},each nth point={3}]table[x=Size,y=Factor]{results.data};
    \end{axis}
    \end{tikzpicture}
\end{figure}

\begin{figure}[!ht]
    \centering
    \pgfplotsset{tick label style={font=\small}}
    \begin{tikzpicture}
    \begin{axis}[   scale only axis,    yticklabel style={inner sep=0pt, align=right, xshift=-0.1cm},
    ,skip coords between index={0}{1}
    ]
    \addplot+[color=blue,only marks,mark=*,mark options=solid, mark options={scale=0.4},each nth point={3}]table[x=Size,y=Factor]{results.data};
    \end{axis}
    \end{tikzpicture}
\end{figure}

решение1

Я полагаю, вы имели в виду "вы надеялись получить" вместо "вы ожидали". each nth pointдобавляет , x filterкоторый отбрасывает все, кроме каждой n-ной входной координаты (как можно написать в руководстве). И теперь вы добавляете еще один, x filterс skip coords between index={0}{1}которымкроме тогоотфильтровывает первую точку. Таким образом, вы получаете тот же результат, что и раньше, за исключением того, что первая нарисованная точка отсутствует.

Поэтому я думаю, что вам придется написать свой собственный, x filterчтобы сделать то, что вы хотите. Другой возможностью было бы использовать функции mark repeatи mark phaseдля достижения того, что вы хотите. Недостатком этого подхода является то, что определенные пределы осей ( xmin, xmax, ymin, ymax) также учитывают «не показанные» точки. Если вас это беспокоит, вам придется задать значения вручную.

% used PGFPlots v1.14
    \begin{filecontents}{results.data}
        Move Size Factor
        A 250 30
        B 250 14
        C 250 10
        A 300 40
        B 300 18
        C 300 7
    \end{filecontents}
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        only marks,
    ]
        \addplot+ [
            each nth point={3},
        ] table [x=Size,y=Factor] {results.data};
        \addplot+ [
            mark=square,
            mark repeat={3},
        ] table [x=Size,y=Factor] {results.data};
    \end{axis}
\end{tikzpicture}

\begin{tikzpicture}
    \begin{axis}[
        only marks,
    ]
        \addplot+ [
            each nth point={3},
            skip coords between index={0}{1},
        ] table [x=Size,y=Factor] {results.data};
        \addplot+ [
            mark=square,
            mark repeat={3},
            mark phase=2,
        ] table [x=Size,y=Factor] {results.data};
    \end{axis}
\end{tikzpicture}
\end{document}

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

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