我有以下类型的文件:
<string1> <x1> <y1>
<string2> <x2> <y2>
...
我想从(x,y)值绘制一个散点图,在不同数据集的第一列中有不同的字符串,这些字符串将使用不同的颜色绘制(我有许多不同的x,y值,但只有一些不同的字符串)。我试过这个:
plot "DATAFILE" using 2:3 title column(1)
不幸的是,这个选择了第一行的第一列,并将其用作所有条目的标题。
答案 0 :(得分:0)
您可以使用awk
仅选择第一列与您的字符串匹配的行:
plot "<awk '$1~/string1/' DATAFILE" using 2:3 title column(1),\
"<awk '$1~/string2/' DATAFILE" using 2:3 title column(1)
等等。对于内置的gnuplot解决方案,您可以执行以下操作:
plot "DATAFILE" u 2:(stringcolumn(1) eq "string1" ? $3:1/0),\
"DATAFILE" u 2:(stringcolumn(1) eq "string2" ? $3:1/0)
如果你想做更自动的事情,为第1列中的每个唯一条目生成图,这个解决方案对我有用:
输入文件(test.dat - 分隔,否则需要更改下面的cut
语句):
one 1 3
two 2 4
ten 3 5
ten 4 3
two 5 4
one 6 5
one 7 3
ten 8 4
two 9 5
ten 10 3
two 11 4
one 12 5
以下行为gnuplot创建一个绘图语句,并保存在一个文件中:
cut -f1 test.dat | sort -u | awk '
BEGIN {print "plot\\"}
{print "\"test.dat\" u 2:(stringcolumn(1) eq \""$1"\" ?\$3:1/0),\\"}' > plot.gp
,内容如下:
plot\
"test.dat" u 2:(stringcolumn(1) eq "one" ?$3:1/0),\
"test.dat" u 2:(stringcolumn(1) eq "ten" ?$3:1/0),\
"test.dat" u 2:(stringcolumn(1) eq "two" ?$3:1/0),\
然后你会这样做:
gnuplot plot.gp
或将行load "plot.gp"
添加到您的脚本中。
我很确定必须有一个“仅限gnuplot”的解决方案,但这超出了我的知识范围。希望这会有所帮助。
答案 1 :(得分:0)
你只有一个情节,所以只有一个标题。
如果你想分别绘制所有数据集(由两个连续的空行分隔),你(只需)这样说:
N_datasets=3
plot for [i=0:N_datasets-1] "file.dat" using 2:3 index i with title columnhead(1)
但是数据文件的格式不是gnuplot所期望的,使用title columnhead
也会跳过第一行(假设只包含头文件)。标准的gnuplot格式为:
string1
x1_1 y1_1
x1_2 y1_2
...
string2
x2_1 y2_1
x2_2 y2_2
...