我的数据格式为:
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必须手动定义不希望使用的调色板。
答案 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]
看看字符串变量categories
和unique_categories
的内容,以更好地了解此代码的作用。