6

I would like to know a way to remove one or more data points from a plot, using pgfplots, generated by an external table "data.csv". In the minimal example below, I would like to remove the third point (3,5) without changing the original table.

\documentclass{article}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{filecontents*}{data.csv}
a,b,c,d
1,4,5,1
2,3,1,5
3,5,6,1
4,1,4,9
5,3,4,7
\end{filecontents*}


\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot table [x=a, y=c, col sep=comma] {data.csv};
\end{axis}
\end{tikzpicture}
\end{document}

Edit

Also, it would be nice to somehow tell pgfplots to erase specifically the "third point", without telling the coordinates. Or at least, only providing the abcissa value. A similar feature is encountered in Origin software, where you choose the points to erase by hand.

7

You can easily do what you want. Just use something like the following:

\begin{tikzpicture}
    \begin{axis}[skip coords between index={2}{3}]
        \addplot table [x=a, y=c, col sep=comma] {data.csv};
    \end{axis} 
\end{tikzpicture}

Notice that when you want to remove line 3, it is the first number (2) that identifies it, because if you have ...index={a}{b} it removes lines with index i such that a<= i<b. This is true because we start counting at i=0, so the line you want to remove is indexed by i=2. You can add multiple lines to be skipped if you want, like:

...
\begin{axis}[skip coords between index={2}{3},
             skip coords between index={5}{6}]
...

This will remove data line 3 (i=2) and 6 (i=5)in the original file (not counting headers, and assuming you had that many lines). In your example, now with data in a seperate file, you could remove the first (0) and last (4) using:

\documentclass{article}
\usepackage{pgfplots}

    \begin{document}
    \begin{tikzpicture}
            \begin{axis}[skip coords between index={0}{1},
                         skip coords between index={4}{5}]
                \addplot table [x=a, y=c, col sep=comma] {data.csv};
            \end{axis}
    \end{tikzpicture}
\end{document}

Producing

enter image description here

  • 1
    I have a follow-up question: If I have two \addplot commands, is there a way to skip different coordinates for each of the commands? – tc88 Jul 26 '17 at 5:10
  • \addplot table [x=a, y=c, col sep=comma, skip coords between index={2}{3}] {data.csv}; can be used for individual plots. – Steven Gardiner Jul 14 '18 at 6:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.