【问题标题】:Plotting lines with missing datapoints for multidimensional data为多维数据绘制缺少数据点的线
【发布时间】:2020-12-17 12:56:52
【问题描述】:

我正在尝试从记录多个 GPU 数据的数据集中绘制多条表示 GPU 使用情况随时间变化的线。每行都包含时间戳、GPU 索引和使用百分比。

我的数据集如下所示:

$ cat gpu.txt

#time   #index   # usage (%)
1,1,10
1,2,5
2,1,20
2,2,10
3,1,40
3,2,30

这是我的 gnuplot 脚本:

$ cat plot.gplot

set datafile separator ","
set   autoscale # scale axes automatically
unset log       # remove any log-scaling
unset label     # remove any previous labels
set xtic auto   # set xtics automatically
set ytic auto   # set ytics automatically
set title
set term png

set title "GPU usage"
set xlabel "Time"
set ylabel "Usage"

set output "gpu.png"

plot "gpu.txt" using ($2 == 1 ? $1 : NaN):($2 == 1 ? $3 : NaN) title 'GPU1' with linespoints ls 10 linecolor rgb "blue", \
     "gpu.txt" using ($2 == 2 ? $1 : NaN):($2 == 2 ? $3 : NaN) title 'GPU 2' with linespoints ls 10 linecolor rgb "red", \

不幸的是,这只会绘制奇异数据点,而不会绘制线条。我认为这是因为“丢失”数据点——显然情况并非如此,因为我有自定义过滤器来绘制每个 GPU 索引的使用数据。我试图通过 NaN 值向 gnuplot 表明这一点,但它似乎不起作用。

示例输出:

【问题讨论】:

    标签: gnuplot


    【解决方案1】:

    这是一个反复出现的过滤数据问题。 您可以定义线型,然后通过ls i 在绘图循环中使用它。 如果您想要连接线,则必不可少的是:set datafile missing NaN。 我的最小建议是:

    代码:

    ### filtering data
    reset session
    
    $Data <<EOD
    #time   #index   # usage (%)
    1,1,10
    1,2,5
    2,1,20
    2,2,10
    3,1,40
    3,2,30
    EOD
    
    set datafile separator ","
    set title "GPU usage"
    set xlabel "Time"
    set ylabel "Usage"
    
    set key top left
    set datafile missing NaN
    myFilter(datacol,filtercol,value) = value==column(filtercol) ? column(datacol) : NaN
    
    plot for [i=1:2] $Data u (myFilter(1,2,i)):3 w lp pt 7 title sprintf('GPU%d',i)
    ### end of code
    

    结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-19
      • 1970-01-01
      • 2014-10-28
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多