Gnuplot-根据第三栏中的标签绘制系列

时间:2018-06-20 15:03:02

标签: gnuplot

我的数据格式为:

1  1  A
2  3  ab
1  2  A
3  3  x
4  1  x
2  3  A

,依此类推。第三列表示系列。也就是说,在上述情况下,存在3个不同的数据系列,一个指定为A,另一个指定为ab,最后一个指定为x。有没有一种方法可以在不使用例如gnuplot的情况下从此类数据结构绘制三个数据系列。 awk?这里的困难在于类别的数量(在这里表示为A,ab,x)非常大,并且用手将它们写出来是不可行的。 我一直在想:

plot data u 1:2:3 w dots

但是不起作用,我得到warning: Skipping data file with no valid points(我尝试了第三列的引用和未引用版本)。 A similar question必须手动定义不希望使用的调色板。

1 个答案:

答案 0 :(得分:0)

只需一点点工作,您就可以在gnuplot中创建唯一类别的列表,而无需使用外部工具。下面的代码片段首先汇编数据文件整个第三列的列表,然后在其上循环以生成唯一类别名称的列表。如果内存使用或处理时间成为问题,则可以将这些步骤结合起来,避免在整个第三列中形成一个字符串。

delimiter = "#"    # some character that does not appear in category name
categories = ""

stats "test.dat" using (categories = categories." ".delimiter.strcol(3).delimiter) nooutput

unique_categories = ""
do for [cat in categories] {
   if (strstrt (unique_categories, cat) ==0) {
      unique_categories = unique_categories." ".cat
   }
}

set xrange[0:5]
set yrange [0:4]
plot for [cat in unique_categories] "test.dat" using 1:(delimiter.strcol(3).delimiter eq cat ? $2 : NaN) title cat[2:strlen(cat)-1]

enter image description here

看看字符串变量categoriesunique_categories的内容,以更好地了解此代码的作用。