【问题标题】:gnuplot set y2axis range from columgnuplot 从列中设置 y 轴范围
【发布时间】:2018-11-22 23:31:35
【问题描述】:

我有以下数据文件:

# Throughput(op/sec)  Num_tr   Bytes_sent(sec)
     3000               10        12000  
      ...               ...         ...

其中吞吐量是客户端每秒能够执行的操作数,Num_tr 是线程数,而 bytes_sent 是每秒发送的字节数。

现在,我可以绘制线程与吞吐量图,例如在我的 x 轴上获得 10,在我的 y 轴上获得 3000。但是,由于 Bytes_sent 和 Throughput 严格相关,我还想使用 y2axis 命令来显示在同一个图中发送的字节数。刻度位置应该相同,但 y2tics 的值应对应于 ($3 / $1) * 范围 (1000, 2000, 3000) 中定义的 y2tick 值

set yrange [0:18000]
set ytics nomirror
set y2label 'Throughput (op/sec)'
set y2tics 5 
set y2label 'Bytes_sent'
set y2range [0:18000 *($3 / $1)]  <---------------- 
plot "data.dat" index 0 using 2:1:xtic(2) ...

有什么想法吗?

提前致谢

【问题讨论】:

    标签: plot graph gnuplot


    【解决方案1】:

    你有两个选择

    (1) 您可以使用“set link”命令将 y2 链接到 y1,并提供与发送的字节数和吞吐量相关的公式

    total_time = <you know this, I take it?>
    throughput(bytes_sent) = bytes_sent / total_time
    bytes(throughput) = throughput * total_time    
    set link y2 via throughput(y) inverse bytes(y)
    set ytics 5 nomirror
    set y2tics nomirror   # range will exactly track y1
    plot "data.dat" index 0 using 2:1
    

    我不知道您对“xtics(1)”的意图是什么,但它不正确,因为第 1 列用于 y 值,而不是 x 值。

    (2) 你可以独立绘制它们

    plot "data.dat" index 0 using 2:1 axes x1y1, \
         "data.dat" index 0 using 2:(thoughput($1)) axes x1y2
    

    在这种情况下,您不需要链接轴或明确设置范围。该图将有两条线,但如果相关性完美,它们将重叠。

    【讨论】:

    • 我不明白 (1),我知道总时间,但它不应该与这个情节相关。查看数据,我发现每行中的每个 bytes_sent / 吞吐量产生的值略有不同,因此它不是一个常数值,我可以简单地与吞吐量相乘。很抱歉造成混乱
    • “总时间”可能是错误的描述。无论您使用什么时间间隔来生成吞吐量值。即,无论时间间隔如何使这对方程式吞吐量(字节)和字节(吞吐量)对您的数据正确。
    • 好的,我明白了。谢谢!
    猜你喜欢
    • 2018-10-09
    • 2011-11-06
    • 1970-01-01
    • 2017-07-30
    • 2019-09-06
    • 1970-01-01
    • 2015-09-08
    • 2015-11-17
    • 1970-01-01
    相关资源
    最近更新 更多