使用gnuplot绘制多变量图表

3

我有一个数据文件,其中有多个列,前两列表示位置,其他列表示其他属性(例如从该点发送的项目数量)。例如:

1  1  1  57.11
2  1  2  62.40
3  4  1  31.92

我想做的是在特定的位置绘制点,但使用其他列中的数值来改变点的类型和大小(例如)。然而,我似乎找不到一种引用图表中不同列的方法。我知道可以使用“variable”的方法,但我找不到使用多个变量的方法。
我想要的是以下内容:
plot "mydata" using 1:2 notitle with points pt ($3) ps ($4/10)

让pt和ps分别使用第三列和第四列中的每个点的值,这是否在gnuplot中可行? 是否有某种解决方法?

1个回答

5

您应该能够使用关键字 variable 做出类似这样的操作:

plot 'datafile' using 1:2:3:4 w points ps variable lc variable

或者将该值映射到调色板上:

plot 'datafile' using 1:2:3:4 w points ps variable lc palette

关键字变量和调色板使gnuplot从文件中读取属性,两者都需要通过using读取额外的列。当然,所有使用的通常方法都适用--您可以对数据应用转换等:
plot 'datafile' using 1:2:3:($4+32.) w points ps variable lc palette

我记不清楚第三列是点大小还是颜色,现在没时间试验一下去弄明白。你可以自己试试,然后评论一下,或者等我有时间了再来更新。


其他一些属性(例如pointtype)不能像variable那样轻松地更改。最简单的方法是使用gnuplot三元运算符进行过滤。

首先,编写一个函数,根据数据文件中的1列返回一个点类型:

my_point_type(x) = x   

在这里,我使用一个简单的身份函数,但它可以是任何内容。 现在,您可以循环处理您想要的点类型(这里是1-10),为每个创建一个图:

plot [for PT=1:10] 'datafile' u 1:((my_point_type($3) == PT) ? $2:NaN) with points pt PT

假设带有点类型信息的列是第三列,第二列包含位置信息。这也可以与我上面演示的内容相结合。


我已经尝试多次使用“变量”,但似乎只有一些参数接受它。例如,ps可以使用变量,但pt不能,而将其与其他参数一起使用会出现相同的错误:“未定义的变量:variable”沿着这条线,我还尝试过在某个示例中找到的命名变量的方法:(昨晚我找到了这个示例,但今天早上我找不到它了) plot“datafile”using 1:2:(myvar1=$3):(myvar2=$4)notitle with points pt myvar1 ps myvar2,但仍然出现了相同的未定义变量错误。 - Paradise
@OverlordAlex -- 啊,抱歉,我看到“pt”就以为你想改变颜色了。实际上,没有办法像那样改变点类型。唯一的解决方案是将数据过滤成各种点类型。我有时间时会更新... - mgilson
@OverlordAlex -- 我已经更新了。也许你的意思是 ... using 1:2:(myvar=$3,$3):(myvar=$4,$4) ...,但我不确定它是否有效。 - mgilson
你最后的编辑似乎是我能得到的最接近的。幸运/不幸的是,我被要求使用matplotlib在Python中重写它,但感谢您的帮助。 - Paradise
@OverlordAlex -- Python是一种非常好的编程语言。对于快速项目,这是我现在首选的语言。我用过matplotlib,但并不是很多(主要是因为我太喜欢gnuplot了,并为它编写了自己的Python包装器)。祝你好运。 - mgilson

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