开发者

gnuplot conditional plotting: plot col A:col B if col C == x

开发者 https://www.devze.com 2023-03-17 13:12 出处:网络
How can I do this in gnuplot:开发者_Go百科 plot \"test.csv\" using 1:2 if value_in_column_3 == 80.0

How can I do this in gnuplot:

开发者_Go百科
plot "test.csv" using 1:2 if value_in_column_3 == 80.0

It should only select those rows where column 3 == 80.0 and ignore all other rows (It should not plot a 0 for the other rows, simply ignore them)

Thanks in advance.


Consider the following dataset (1.dat),

1 0.8 0
2 0.6 0
3 0.9 1
4 1.1 0
5 0.7 0
6 0.6 1

where we want to plot the first two columns only when the third one equals zero. Then you can try this:

plot '1.dat' using 1:($3==0?$2:1/0)

(Credit to markjoe on Gnuplot mailing-list.)


Case where one wants to plot conditionally on another column containing text:

data

1 0.8 a
2 0.6 a
3 0.9 a
1 2.1 b
2 1.7 b
3 1.6 b

code

set terminal postscript color
set xrange [0:4]
set yrange [0:3]
plot "1.dat" using 1:(stringcolumn(3) eq "a"? $2:1/0) title "a" lc rgb "blue" ,\
  "" using 1:(stringcolumn(3) eq "b"? $2:1/0) title "b" lc rgb "red"

command

gnuplot < 1.par > 1.ps


As chl says above, the only way to do this in gnuplot is rather hacky: you have to use gnuplot's terniary ?: operator to generate a numerical error on the points you want to filter out of your dataset.

I may be biased here as I'm an author on the project, but you may want to have a look at Pyxplot http://www.pyxplot.org.uk (also free and open source), written by a group of gnuplot users who were a bit fed up with hacky syntax like this.

Its syntax is very similar to gnuplot, but with extensions. For what you want, you can specify a "select criterion" in the plot command, and points are only included if it tests True. See http://pyxplot.org.uk/current/doc/html/sec-select_modifier.html for more information.


Another hack would be to use a shell command like awk:

plot "< awk '$3==80.0 { print $1, $2 }' test.csv" using 1:2


If you are calling a script, use column(2) instead of $2

plot "1.dat" using 1:(stringcolumn(3) eq "a"? column(2):1/0) title "a" lc rgb "blue" ,\
  "" using 1:(stringcolumn(3) eq "b"? column(2):1/0) title "b" lc rgb "red"
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号