为多维数据绘制缺少数据点的线

Plotting lines with missing datapoints for multidimensional data

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

我的数据集如下所示:

$猫gpu.txt

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

这是我的 gnuplot 脚本:

$猫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 ( == 1 ?  : NaN):( == 1 ?  : NaN) title 'GPU1' with linespoints ls 10 linecolor rgb "blue", \
     "gpu.txt" using ( == 2 ?  : NaN):( == 2 ?  : NaN) title 'GPU 2' with linespoints ls 10 linecolor rgb "red", \

不幸的是,这只会绘制奇异数据点,而不会绘制线条。我认为这是因为“缺少”数据点 - 这显然不是这种情况,因为我有自定义过滤器来绘制每个 GPU 索引的使用数据。我试图通过 NaN 值将此指示给 gnuplot,但它似乎不起作用。

示例输出:

这是一个反复出现的过滤数据问题。 您可以定义线型,然后通过 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

结果: