2015-04-29 47 views
2

我有一個數據集,我想從中生成一組圖表,並且我在執行gnuplot時遇到問題。如何從一組樣本數據中繪製多個圖表?

我得有以下的列數據集:

  • 時間(時間戳ISO-8601格式YYYY-MM-DDTHH:mm:ss.sssZ
  • 客戶端(客戶端的主機名;數據集中的兩個不同的客戶端)
  • 服務器(服務器的主機名;在數據集中八個不同的服務器)
  • 兩個相關的統計信息,A1和A2
  • 兩個等相關的統計信息,B1和B2

給定的時間戳通常在其中包含單個樣本。我在數據集中有大約7000行。一些示例行看起來像:

time    | client | server | stat A1 | stat A2 | stat B1 | stat B2 
--------------------+----------+----------+---------+---------+---------+-------- 
2015-04-01T03:47:12 | client-x | server-1 | 12.2 | 20.0 | 2.3 | 7.0 
2015-04-01T03:49:09 | client-y | server-6 | 15.0 | 25.2 | 10.0 | 15.2 

我想生成四個圖,如折線圖,每個組合的相關統計和客戶端。

  1. 客戶-x和統計A1和A2
  2. 客戶-x和統計B1和B2
  3. 客戶y和統計A1和A2
  4. 客戶y和統計B1和B2

在這一點上,完全喪失瞭如何用gnuplot解決這個問題。我接受其他選項來生成情節,但是當我獲得新的/更新的數據集時,它需要編寫腳本。

回答

1

爲了獲得線圖,必須在gnuplot之外進行數據過濾,例如,與awk

首先建立與

set xdata time 
set timefmt '%Y-%m-%dT%H:%M:%S' 

時間格式然後提取出所有可能的客戶名稱,除非你已經知道可能的客戶端名稱:

clients = system("awk '!/^#/ { print $2 }' test.dat | sort | uniq") 

,然後繪製使用multiplot數據

set style data lines 
set multiplot layout 2,2 

do for [client in clients] { 
    set title sprintf("client '%s'", client) 
    plot sprintf('< grep ''\b%s\b'' test.dat', client) using 1:4 title "A1", '' using 1:5 title "A2" 
    plot sprintf('< grep ''\b%s\b'' test.dat', client) using 1:6 title "B1", '' using 1:7 title "B2" 
} 
unset multiplot 

The問題與How to use one of the column of data as legend in gnuplot?非常相似。

相關問題