Как вы суммируете каждый n-й столбец данных в gnuplot? - PullRequest
1 голос
/ 13 марта 2020

Я хотел бы взять среднее значение по нескольким столбцам набора данных в Gnuplot. Проблема в том, что я хочу усреднить каждый второй столбец (начиная со второго столбца моего набора данных). Я думал об использовании каждого как-то, но до сих пор не понимаю, когда и где использовать каждый. Чтобы помочь визуализировать мой вопрос: мои данные выглядят примерно так:

x  y1  z1  y2  z2
2  0.6  0  0.6  0
1  0.7  0  0.7  1
1  0.8  2  0.8  1
1  0.9  0  0.9  0

, и я бы хотел усреднить y1 и y2 и построить график, выполнив что-то вроде:

stats filename nooutput
plot filename u 1:sum[col = every :2::2::STATS_columns] / ((STATS_columns-1)/2)

Не конечно, если это где-то близко к выполнимо, хотя. Кроме того, было бы неплохо иметь способ определения количества используемых столбцов без какого-либо априорного знания о том, как выглядят данные. В этом примере я использовал свои знания о данных, чтобы узнать, что среднее число очков превышает ((STATS_columns-1) / 2) количество баллов.

Спасибо за ваш ответ

1 Ответ

1 голос
/ 13 марта 2020

Исходя из вашего кода, я предполагаю, что вы хотите усреднить y1 и y2 для каждой строки, а затем построить график в зависимости от x (столбец 1). Поскольку у вас есть несколько одинаковых значений x, будет другое среднее, а именно среднее значение по столбцам и по всем одинаковым значениям x. Я изменил ваши данные, чтобы лучше проиллюстрировать разницу. Я полагаю, вы спрашивали красные круги. Синие треугольники - это в среднем среднее значение, то есть среднее значение красных точек. Проверьте help summation и help smooth. sum не имеет размера шага с индексом. Из справки gnuplot:

sum [<var> = <start> : <end>] <expression>

Код:

### average over columns and smooth
reset session

$Data <<EOD
#x  y1  z1  y2  z2
1  2.0  0  4.0  0
1  2.2  0  4.2  1
1  2.9  2  4.9  1
2  2.1  0  4.1  0
2  2.3  0  4.3  0
2  2.8  0  4.8  0
3  2.2  0  4.2  0
3  2.3  0  4.3  0
3  2.7  0  4.7  0
EOD

stats $Data nooutput
set offsets 0.5,0.5,0.5,0.5

Count = (STATS_columns-1)/2
plot $Data u 1:((sum[i=1:Count] column(i*2))/Count) w p pt 7 lc rgb "red" ti "average over y1,y2 columns for each row",\
     $Data u 1:((sum[i=1:Count] column(i*2))/Count) smooth unique w p pt 9 lc rgb "blue" ti "average over y1,y2 for each x"
### end of code

Результат:

enter image description here

...