【问题标题】:Gnuplot : Using a stats output as a data pointGnuplot:使用统计输出作为数据点
【发布时间】:2018-03-20 02:36:58
【问题描述】:

我有三个数据文件,每个文件都有一个矩阵;我使用 stats 来查找每个文件的矩阵中的最大值并正确显示。我需要使用这三个最大值作为数据点并绘制它们,以便在我的图上有点为 (1.0, A_max), (2.0, B_max) 和 (3.0, C_max) 其中 A_max 是使用统计数据计算的最大值第一个数据文件,B_max 来自第二个,C_max 来自第三个。这是我的 gp 文件的样子:

    set terminal epslatex size 3.5,2.62 color colortext
    set output 'data.tex'
    set xlabel '$x$'
    set ylabel '$y$'

    stats 'dataA.txt' matrix name "A"
    show variables A_
    stats 'dataB.txt' matrix name "B"
    show variables B_
    stats 'dataC.txt' matrix name "C"
    show variables C_

    plot '-' w p, '-' w p, '-' w p
    1.0 A_max
    e   
    2.0 B_max
    e
    3.0 C_max
    e

我得到的情节如下所示。

显然,它将 x 轴设为 0,而我打算为 x 轴设置的点对应于 y。不知道我错过了什么,可能是如何读取 stats 变量。任何帮助将不胜感激。

【问题讨论】:

    标签: gnuplot


    【解决方案1】:

    与您使用的一样,内联数据按原样使用,无需任何变量替换。 使用set print $data将数据打印到命名数据块$data

    set print $data
    stats 'dataA.txt' matrix name "A"
    print sprintf("%e A", A_max)
    stats 'dataB.txt' matrix name "B"
    print sprintf("%e B", B_max)
    stats 'dataC.txt' matrix name "C"
    print sprintf("%e C", C_max)
    plot $data using 0:1:xticlabel(2) w p notitle
    

    或者,自动化程度更高:

    set print $data
    do for [f in "A B C"]{
        stats 'data'.f.'.txt' matrix name f
        print sprintf("%e %s", value(f.'_max), f)
    }
    plot $data using 0:1:xticlabel(2) w p notitle
    

    【讨论】:

    • 像魅力一样工作!非常感谢!!
    • 不应该是plot $data using 0:2:xtic(1) w p notitle 来绘制图表,使用第一列中的 xtic 并绘制第一列中的最大值吗?我试过了,但你的建议是给出正确的结果,我不明白为什么。
    • xticxticlabel 的快捷方式。 using 0:1:xtic(2)means:使用来自第零列的值(这是一个隐含的列,包含行号)作为 x 值,来自第一列的值(最大值)作为 y,并使用来自第二列的字符串列作为 x 轴上每个数据点的显式标签。
    • 但是在print sprintf("%e A", A_max) 中,第零列是我们的行号,第一列是字符串,第二列是我们需要的最大值,对吧?那么,不应该是using 0:2:xtic(1) 工作吗?如果我在这里天真,我很抱歉,但我可能遗漏了一些东西。
    • 不,第一列是数值A_max,格式为数字(“%e”),第二列包含字符串“A”,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2016-07-20
    • 2020-04-01
    • 1970-01-01
    • 2021-08-07
    相关资源
    最近更新 更多