Search code examples
selectplotgnuplot

gnuplot scatter plot selecting data on range of value in 3rd Column


In a Windows 7 environment, I need to do a gnuplot scatter plot of 2 columns selecting data based on a range of values in a 3rd column. I know how to do it by creating separate data files for each range, but is it possible to do it by filtering on the data value in a 3rd column without awk Thanks

plot "<awk '{if($3>=11 && $3<=19) print $0}' plot.dat " using 1:2 with points warning: Skipping data file with no valid points

I Presume the error is because I don't have awk in windows7 envirenment


Solution

  • There are (should be) many examples of filtering data with gnuplot here on StackOverflow, however, mostly combined with another issue. So, whenever I'm trying to search for a really good and clear example, it takes more time for searching than to simply write down the line. You definitely don't need awk!

    Attention: Filtered data will not be connected in a line plot. So, in case you want to plot connected filtered lines, e.g. with lines or with linespoints you need to prepend an extra line. I assume you have gnuplot>=5.0. For older gnuplot versions you can check this workaround.

    The following will plot column 1 versus column 2, but only if column 3 is in the range 11 to 19.

    set datafile missing NaN
    plot "myData.dat" u 1:($3>=11 && $3<=19 ? $2: NaN) w linespoints