【问题标题】:Plotting using multiple variables in gnuplot在 gnuplot 中使用多个变量进行绘图
【发布时间】:2013-01-19 14:19:22
【问题描述】:

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

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

我想要做的是绘制位置处的点,但使用其他列中的值来改变点的类型和大小(例如)。但是我似乎无法找到一种方法来引用图中的列。我知道“变量”的使用,但我找不到使用多个变量的方法。

我想要的是如下内容:

plot "mydata" using 1:2 notitle with points pt ($3) ps ($4/10)

以便 pt 和 ps 使用分别取自第三列和第四列的每个点的值。

这在 gnuplot 中是否可行?有什么解决办法吗?

【问题讨论】:

    标签: variables plot gnuplot


    【解决方案1】:

    您应该可以使用关键字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 读取额外的列。当然,所有使用 using 的常用内容都适用——您可以对数据应用转换等:

    plot 'datafile' using 1:2:3:($4+32.) w points ps variable lc palette
    

    我不记得第 3 列是这里的磅值还是颜色,我现在没有时间玩弄它来弄清楚。您可以进行实验并发表评论,或者我会在有时间时再回来添加更新。


    其他一些属性(例如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
    

    这假定具有点类型信息的列是第 3 列,而第 2 列包含位置信息。这也可以与我上面演示的内容结合使用。

    【讨论】:

    • 我多次尝试使用“变量”,但似乎只有一些参数接受它。例如, ps 对变量很满意,但 pt 不满意,并且将它与其他参数一起使用会产生相同的错误:undefined variable: variable 沿着这些线,我还尝试命名变量,如在某处的示例中找到的那样:(我最后找到了示例晚上,但今天早上我再也找不到它了)plot "datafile" using 1:2:(myvar1=$3):(myvar2=$4) notitle with points pt myvar1 ps myvar2 这只是给出了相同的未定义变量错误。
    • @OverlordAlex -- 啊,抱歉,我看到了pt,我只是假设您正在尝试更改颜色。不,没有办法像那样改变点类型。唯一的解决方案是将数据过滤成各种点类型。有时间我会更新的...
    • @OverlordAlex -- 我已经更新了。也许你的意思是... using 1:2:(myvar=$3,$3):(myvar=$4,$4) ... 我不确定这是否可行。
    • 你最后的编辑似乎是我能得到的最接近的。幸运/不幸的是,我被要求使用 matplotlib 在 python 中重写它,但感谢您的帮助
    • @OverlordAlex -- Python 是一种非常好的编程语言。这是我这些天来进行快速项目的第一件事。我使用了一点matplotlib,但不是很多(主要是因为我非常喜欢 gnuplot 并为它编写了自己的 python 包装器)。祝你好运。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    相关资源
    最近更新 更多