Как просуммировать весь столбец в gnuplot? - PullRequest
1 голос
/ 09 мая 2020

У меня есть несколько таких CSV-файлов (только один столбец):

3
4
2.3
0.1

Теперь я хочу создать гистограмму gnuplot с <filename>:<sum of the column>.

Но в настоящее время я борьба с суммированием одного столбца:

plot 'data1.txt' using 0:(sum [col = 0:MAXCOL] (col)) with linespoint;

Ответы [ 2 ]

2 голосов
/ 09 мая 2020

Команда, которую вы показываете, суммирует каждую строку, а не каждый столбец.

(1) Если вы можете транспонировать строки / столбцы в вашем CSV-файле перед его загрузкой в ​​gnuplot, эта команда создаст график, близкий к что вы просите. Обратите внимание, что MAXCOL - это действительно количество строк (а не столбцов) в исходном файле данных

  set boxwidth 0.5
  set style fill solid
  plot 'transpose_of_original' using 0:(sum [col=0:MAXCOL] col) with boxes

(2) В качестве альтернативы вы можете выполнить суммирование gnuplot, сначала накопив суммы, а затем построив график

  # get number of columns
  stats 'data1.txt' nooutput
  NCOL = STATS_columns
  array SUM[NCOL]
  # get sum for each column
  do for [col=1:NCOL] {
      stats 'data1.txt' using col nooutput
      SUM[col] = STATS_sum
  }

  # Now we plot the sums in a bar chart
  set style fill solid
  set boxwidth 0.5
  set xlabel "Column"
  set ylabel "Sum"
  plot SUM using 1:2 with boxes

enter image description here

1 голос
/ 11 мая 2020

С помощью @Ethan я смог решить свою проблему:

array files = ['data1.txt', 'data2.txt']
array SUM[|files|]
do for [i=1:|files|] {
  stats files[i] using 1 nooutput
  SUM[i] = STATS_sum
}
set style fill solid
set boxwidth 0.5
set xlabel 'File'
set ylabel 'Sum'
set yrange [0:]
plot SUM using 1:2:xticlabels(files[column(0)+1]) with boxes

data1.txt:

11
22
33
44

data2.txt:

11
2
33
4

enter image description here

...