Plotpgf überspringe Koordinaten+ jedes n-te

Plotpgf überspringe Koordinaten+ jedes n-te

Was ist das erwartete Verhalten, wenn man die Sprungkoordinaten und jeden n-ten Befehl in einem pgfplot kombiniert? Mit dem folgenden Code sollte ich ein Diagramm mit den Punkten (250, 30) und (300, 40) und ein weiteres Diagramm mit den Punkten (250, 14) und (300, 18) erhalten.

Stattdessen ist die erste Darstellung korrekt, während die zweite nur den Punkt (300, 40) erzeugt, als ob die beiden Optionen nicht zusammenpassen würden.

\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}

Antwort1

Ich nehme an, Sie meinten „Sie hofften zu bekommen“ statt „Sie erwarteten“. each nth pointhängt ein an x filter, das alle Eingabekoordinaten außer jeder n-ten verwirft (wie im Handbuch geschrieben werden kann). Und jetzt fügen Sie ein weiteres hinzu, x filtermit skip coords between index={0}{1}demZusätzlichfiltert den ersten Punkt heraus. Somit erhält man das gleiche Ergebnis wie vorher, nur dass der erste gezeichnete Punkt fehlt.

Ich denke also, dass Sie Ihr eigenes Skript schreiben müssen, x filterum das zu erreichen, was Sie möchten. Eine andere Möglichkeit wäre, die Funktionen mark repeatund zu verwenden mark phase, um das zu erreichen, was Sie möchten. Der Nachteil dieses Ansatzes besteht darin, dass die festgelegten Achsengrenzen ( xmin,,,,, ) auch die „nicht xmaxangezeigten “ Punkte berücksichtigen. Falls Sie das stört, müssen Sie die Werte manuell festlegen.yminymax

% 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}

Bild, das das Ergebnis des obigen Codes zeigt

verwandte Informationen