在gnuplot中仅绘制特定列

4

我有一个csv文件,如下所示,我想绘制S(在x轴上)和B(在y轴上)。如何使用gnuplot生成线条图。

    Test_Image,Original_Size
    red-room.png,918394
    Q,S,B,S,C,R
    0,1021763,0.121086,0.00001459,-11.26,-222.18
    1,1061763,0.125086,0.00001459,-11.26,-222.18
    2,1051763,0.121086,0.00001459,-11.26,-222.18
    3,1041763,0.121086,0.00001459,-11.26,-222.18
    4,986461,0.151573,0.00003318,-7.63,-211.67
    5,955766,0.160869,0.00005782,-4.07,-201.37

基本上,我需要一种告诉gnuplot忽略前3行并绘制第2列和第3列的方法。

3个回答

8
你需要告诉gnuplot,字段是由逗号分隔的,它应该绘制第2列和第3列:
set datafile separator comma
plot "data.csv" using 2:3 w lp

Gnuplot 会自动忽略前三行。


分隔符逗号完成了工作! - bonCodigo

1
您可以按照以下方式修改读入的数据(而不影响您的输入文件):
plot 'awk -F, "NR>3{print $2,$3}" data.csv |' using ...

这句话的意思是打印输入文件data.csv中行号大于3的行的第2和第3个字段。

你可以在终端中单独使用awk命令来进行实验,以在不涉及gnuplot的情况下测试它:

awk -F, 'NR>3{print $2, $3}' data.csv

0
在user8153的答案中,gnuplot会忽略前三行,因为它们包含字符串而不是数字。如果第二列和第三列包含一些数字,则会将它们绘制出来。
因此,一个稍微不同的方法是:
  • 显式跳过两行
  • 通过标题字符串指定列 "S""B"。这样,您甚至不必关心数据是否位于第2列和第3列或其他位置。甚至具有不同列数或顺序但具有相同标题的文件也将被正确绘制。
脚本:
### select columns via header strings
reset session

$Data <<EOD
Test_Image,Original_Size
red-room.png,918394
Q,S,B,S,C,R
0,1021763,0.121086,0.00001459,-11.26,-222.18
1,1061763,0.125086,0.00001459,-11.26,-222.18
2,1051763,0.121086,0.00001459,-11.26,-222.18
3,1041763,0.121086,0.00001459,-11.26,-222.18
4,986461,0.151573,0.00003318,-7.63,-211.67
5,955766,0.160869,0.00005782,-4.07,-201.37
EOD

set datafile separator comma

plot $Data u "S":"B" skip 2 w lp pt 7 lc "red"
### end of script

结果:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接