2016-05-06 2 views
1

Я работаю над скриптом, который генерирует csv с произвольным числом значений y для заданного значения x. Первая строка csv имеет имена наборов данных. Значение x - это временная метка unix. Я хотел бы использовать gnuplot для построения диаграмм этих данных в виде графического графика, в котором значения показаны как доли общего числа для этой строки. Как мне это сделать?GNUPlot - произвольное количество столбцов в уложенной строке

Я рассмотрел следующие решения и попытался их интегрировать, но я не могу понять, что я делаю неправильно.

Он будет либо говорить не достаточно столбцов, либо некорректно для количества столбцов.

Существует до N столбцов данных для заданного временного индекса. Общая сумма, на которую я смотрю, относится к заданному временному индексу.

-

Пример моих данных:

KEY,CSS,JavaScript,Perl,Python,Shell 
1428852630,0,0,0,0,406 
1428852721,0,0,0,0,406 
1428852793,0,0,0,0,406 
1428853776,0,0,0,0,781 
1429889154,0,0,0,0,1200 
1429891056,0,0,0,0,1648 
1429891182,0,0,0,0,1648 
1429891642,0,0,0,0,1648 
1430176065,0,0,0,0,2056 

Тем не менее, может быть большое количество столбцов, я хочу один, который задает число столбцов на время выполнения.


http://gnuplot.sourceforge.net/demo/histograms.html - Это, кажется, есть проблемы с модифицируются, чтобы иметь произвольное количество столбцов.

plot 'immigration.dat' using (100.*$2/$24):xtic(1) t column(2), \ 
    for [i=3:23] '' using (100.*column(i)/column(24)) title column(i) 

https://newspaint.wordpress.com/2013/09/11/creating-a-filled-stack-graph-in-gnuplot/

+0

Там есть противоречие: «значения показаны в виде долей в общей сложности» и «я не знаю YRange»? Код выглядит хорошо, объясните, какие у вас проблемы. Есть 24 столбца в каждой строке, например. ? – Joce

+0

@Joce Я просто добавил информацию о столбцах и удалил неизвестный yrange. – HSchmale

+0

Как добавить нули в пустые столбцы? Вы также можете определить символ «отсутствующих данных», который будет использоваться в вашем файле, например. 'set datafile missing??" '. Вы должны включить минимальный пример с небольшим образцом данных, чтобы получить точный ответ. – Joce

ответ

1

This answer показывает, как считать столбцы, с небольшим изменением:

file="file.dat" 
get_number_of_cols = "awk -F, 'NR == 1 { print NF; exit }' ".file 
nc=system(get_number_of_cols) 

Тогда вам нужно так сумма colums 2 до nc, давайте делать это с рекурсией:

sum(c,C)=((c!=C)?column(c)+sum(c+1,C):column(c)) 

А теперь вы можете построить:

set key outside 
set datafile separator "," 
plot for [i=nc:2:-1] file using 0:(100*sum(2,i)/sum(2,nc)):xtic(1) title columnhead(i) with filledcurve y=0 

enter image description here

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