2016-11-08 8 views
1

Я работаю со встроенным измерительным инструментом. Я использую gnuplot (gnuplot 4.6 patchlevel 4) для визуализации.gnuplot - draw stacked line chart

Мне нужно, чтобы представить результаты (метод времени выполнения для нескольких прогонов), как сложены линейный график, что-то вроде этого:

example stacked line chart

Вот отрывок из моего файла .tsv данных:

Run MethodA MethodB MethodC 
1 192 171 152 
2 227 178 161 
... 
10 229 161 149 

И сценарий, который я использую:

#!/usr/bin/gnuplot -p 

reset 
clear 

set terminal png size 640,480 
set output "timings.png" 
set key top left outside horizontal autotitle columnhead 
set title "Third-party REST calls" 

set xlabel "Run (ordinal)" 
set xtics nomirror scale 0 

set ylabel "Time (milliseconds)" 
set ytics out nomirror 

set grid ytics lt 0 lw 1 lc rgb "#bbbbbb" 

set style data histogram 
set style histogram rowstacked 
set style fill solid border -1 
set boxwidth 0.75 

plot "timings.tsv" using 2:xticlabels(1) , "" using 3, "" using 4 

я получаю следующий результат:

histogram

Да, это не линейный график, но гистограмма (мне нужно, чтобы представить процент времени выполнения каждого метода). Мне нужно немного другой результат (тот же гистограмму, а не с коробками, но с линиями, которые соединяют коробки вершины и с заполнением ниже линии), например:

stacked line diagram - desired diagram

Я понимаю, подход с filledcurve-х (например, описано там Creating a Filled Stack Graph in GNUPlot), но в этом подходе вам нужно явно суммировать значения.

Можно ли нарисовать заполненные области вместо ящиков через gnuplot, например. конвертировать гистограмму в сложную линейную диаграмму?

+1

Да, вы должны суммировать явно, но это довольно легко, используя 'участок for' вместе с' функции sum', как на той же странице вы связаны в. – Christoph

ответ

1

Вам нужно суммировать значения явно, но это не большая проблема. Вы можете сценарий легко:

firstcol=2 
cumulated(i)=((i>firstcol)?column(i)+cumulated(i-1):(i==firstcol)?column(i):1/0) 
plot "file.dat" using 1:(cumulated(4)), "" using 1:(cumulated(3)), "" using 1:(cumulated(2)) 
+0

Работает не только для трех столбцов данных. Я также успешно суммировал 6 столбцов. Единственный недостаток «... с использованием 1: (кумулятивный (4))», «используя 1: (кумулятивный (3)) ...» - это то, что названия столбцов исчезают. Поэтому легенда пропущена. Но это не сложно восстановить, просто добавьте заголовок для каждого столбца следующим образом: «... используя 1: (кумулятивный (4)) заголовок columnhead (4),« », используя 1: (кумулятивный (3)) заголовок columnhead (3) ... 'Большое спасибо. – flaz14

+1

Он работает для любого номера столбца, а 'firstcol' позволяет вам определить первый столбец последовательности для суммирования. Однако было бы немного неловко пропустить некоторые столбцы. Использование обратного порядка может быть полезно в сочетании с 'fillcurve'. – Joce

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

  • Нет связанных вопросов^_^