2015-04-29 3 views
2

У меня есть набор данных, из которого я хотел бы создать набор графиков, и у меня возникли проблемы с получением gnuplot, чтобы сделать это.Как я могу построить несколько диаграмм из набора данных образца?

У меня есть набор данных со следующими столбцами:

  • времени (временной метки в-8601 ISO формате 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. клиент-х и статистика A1 и A2
  2. клиент-х и статистика B1 и B2
  3. клиент-у и статистика A1 и A2
  4. клиент-у и статистика 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 

вопрос очень похож на How to use one of the column of data as legend in gnuplot?.

Смежные вопросы