gnuplot设置y2axis范围从列

时间:2018-11-22 23:31:35

标签: plot graph gnuplot

我有以下数据文件:

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

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

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

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) ...

有什么主意吗?

预先感谢

1 个答案:

答案 0 :(得分:0)

您有两种选择

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

    push    ds
    push    es
    mov     ax, 0xb800
    mov     ds, ax
    mov     es, ax
    xor     si, si
    mov     di, 80
    mov     cx, 25

L0: push    cx
    mov     cx, 40

L1: mov     ax, [di]
    movsw
    mov     [si-2], ax
    loop    L1

    xchg    si, di
    add     di, 160
    pop     cx
    loop    L0

    pop     es
    pop     ds

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

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

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

在这种情况下,您不需要链接轴或显式设置范围。该图将有两条线,但是如果相关关系是完美的,它们将会叠加。