gnuplot键生成问题

时间:2015-01-12 14:44:44

标签: key gnuplot legend dynamically-generated

我的文件格式如下:

2014/3/12 18:02:36 1 SSID1
2014/3/12 18:02:37 1 SSID1
2014/3/12 18:02:38 2 SSID2
2014/3/12 18:02:39 1 SSID1
2014/3/12 18:02:39 3 SSID3
2014/3/12 18:02:39 3 SSID3
2014/3/12 18:02:39 2 SSID2

我创建了一个gnuplot脚本来绘制日历方案 - > X中的日期和Y中的小时数,每个与SSID的连接点数。我使用lc变量从列(3)生成不同的颜色。

reset
clear

file_exists(file) = system("[ -f '".file."' ] && echo '1' || echo '0'") + 0


fontsize(x)=((GPVAL_TERM eq 'postscript') && \
    (strstrt(GPVAL_TERMOPTIONS,"eps")!=0)) ? x*2 : x

set xdata time
set ydata time

set timefmt x "%Y/%m/%d"
set timefmt y "%H:%M:%S"

day = 360*24
set xtics 70*day

set format y "%H"
set format x "%B %d"

set ylabel "Time (Hour)"
set xlabel "Date (Month Day)" offset -1,0

set xlabel font 'Arial-Bold, 15"
set ylabel font 'Arial-Bold, 15"

set xtics rotate
set xtics font "Arial-bold, 15"
set ytics font "Arial-Bold, 15"

set style data points

set terminal png size 3200,2400

do for [i=2:2] {

  if ( file_exists("data".i.".dat") ) {

    set output sprintf("%s.png", "data".i)

    set key box below

    set title "Different SSID Wifi on color"

    plot "data".i.".dat" using 1:2:3 linecolor variable pt 7 ps 1 t columnhead(4)

   }

}

但我没有正确的传奇(关键)。使用我的代码,我只有一个包含第(4)列第一个SSID的框,颜色正确...但是如何在这个框中使用所有可变颜色的所有SSID?

如果有人可以提供帮助,谢谢!

度过美好的一天!

1 个答案:

答案 0 :(得分:1)

使用title columnheader(4),您可以选择第一行的第四列作为整个图的关键标题。要获得正确的标题,以及密钥中的正确线条颜色(请参阅Different color per dataset关于linecolor variable的关键颜色),最好生成包含所有唯一SSID的列表,然后迭代它们:< / p>

file = 'data2.dat'
SSIDs = system(sprintf('awk ''{print $4}'' %s | sort | uniq', file))

set xdata time
set ydata time

set timefmt x "%Y/%m/%d"
set timefmt y "%H:%M:%S"

day = 360*24
set xtics 70*day

set format y "%H"
set format x "%B %d"

set style data points

plot for [s=1:words(SSIDs)] file using (strcol(4) eq word(SSIDs, s) ? timecolumn(1) : 1/0):2:3 lc s pt 7 ps 1 t word(SSIDs, s)

注意,在绘制1/0时,使用此with points技巧可以正常工作。如果由于某种原因想要绘制线条,则必须使用例如grep

cmd(s, f) = sprintf('< grep ''%s'' %s', s, f)
plot for [s=1:words(SSIDs)] cmd(s, file) using 1:2:3 lc s pt 7 ps 1 t word(SSIDs, s)