#statistics #gnuplot
Вопрос:
у меня такой csv-файл
2021-10-31;20:30:26
2021-10-31;20:32:15
2021-10-31;20:39:17
2021-10-31;20:40:15
2021-10-31;20:42:13
2021-11-01;08:37:15
...
я хотел бы рассчитать записи в течение 10-минутного интервала и отобразить их в виде гистограммы. В приведенном выше примере с 20:30 до 20:40 есть 3 попадания, с 20:40 до 20:50 есть 2 попадания и так далее.
Есть ли какой-нибудь способ сделать это с помощью gnuplot? Или мне нужно подготовить данные?
Спасибо тебе, Мартин
Ответ №1:
Вы можете попробовать такой smooth frequency
вариант:
reset
# formatting of output data (graph)
set format x "%Y-%m-%dn%H:%M" timedate
# y-axis, bar graph should start at 0
set yrange [0:*]
set ylabel "Occurences"
set ytics 1
# make some space for large x axis labels
set rmargin at screen 0.95
# put input values into bins/time intervals
binwidth=10*60 # 10 minutes in seconds
bin(val) = binwidth * floor(val/binwidth)
# configure bar graph
set boxwidth binwidth
# final plot command
plot "a.dat" using (bin(timecolumn(1, "%Y-%m-%d;%H:%M:%S"))):(1) smooth freq with boxes fs solid 0.25 notitle
Документация от help smooth freq
:
The `frequency` option makes the data monotonic in x; points with the same
x-value are replaced by a single point having the summed y-values.
To plot a histogram of the number of data values in equal size bins,
set the y-value to 1.0 so that the sum is a count of occurances in that bin:
Example:
binwidth = <something> # set width of x values in each bin
bin(val) = binwidth * floor(val/binwidth)
plot "datafile" using (bin(column(1))):(1.0) smooth frequency
У вас есть данные о времени, поэтому column
их необходимо заменить timecolumn
, см.
help timecolumn
для подробностей.
Команда set boxwidth
используется в стиле построения полей, см. help plotting styles boxes
Подробности.