gnuplot - использование переменной в using

pfqneyf15

Функция plot читает файл с множеством колонок. Значения X всегда хранятся в 1-ой колонке. Номер n колонки, где хранятся значения Y, вычисляется в гнуплотовском скрипте.
После этого команда
 
plot "filename.dat" u 1:n  
срабатывает нормально, а вот команда
 
plot "filename.dat" u 1:($n*100)
уже не работает - пишет "Column number expected". Почему?

sensel

Может gnuplot считает избыточным писать $.
http://www.cs.hmc.edu/~vrable/gnuplot/using-gnuplot.html
Note that as part of a using qualifier, ($2) is exactly equivalent to 2.
Результат работы команды ниже это не то, что надо?
plot "filename.dat" u 1:(n*100)

pfqneyf15

Результат работы команды ниже это не то, что надо?
plot "filename.dat" u 1:(n*100)
Нет, в этом случае он возьмёт значение n, умножит его на 100 и будет считать, что все Y будут равны произведению n*100. Т. е. будет константная функция.
А мне надо, чтобы он умножал столбец на 100.

sensel

Если у тебя версия 4.8.0, можешь использовать команды stats и xrange, yrange для этих целей.
http://stackoverflow.com/questions/13580236/gnuplot-max-and-...
stats [1:3] 'data.txt'
plot [stats_min_x:stats_max_x][stats_min_y:stats_max_y] 'data.txt'
P.S. В более ранних версиях нужно использовать переменные GPVAL_DATA_Y_MIN:GPVAL_DATA_Y_MAX и выполнять replot.

pfqneyf15

Похоже ты удалил старое сообщение. Тем не менее отвечу на него, может станет яснее, что мне надо.
Если тебе нужно масштаб поменять, то для этого есть autoscale или явно заданный range.
Нет, масштаб мне менять не надо. Пример с n*100 я привёл как самый простой. Но у меня другая проблема: у меня есть цикл, где в зависимости от номера итерации вычисляется номер колонки. Не было бы проблем, если мне было достаточно визуализировать эту колонку, т. к. plot "filename.dat" u 1:n работает без проблем. Проблема возникает, когда я хочу предварительно выполнить некоторые манипуляции со значениями из колонки n (значение которой я заранее не знаю и только потом их визуализировать, а мне надо визуализировать сумму двух колонок, например n и n+1, но код plot "filename.dat" u 1:($n+$(n+1 не работает.
По твоей формуле вне зависимости от того, задаешь ты n или явно указываешь ось (например 2 ты получаешь домножение значений.
set term png; set output "test.png"; n=2; plot 'filename.dat' using 1:($2*100)
Ты опечатался, или я тебя неправильно понял в предудущем твоём посте.
plot 'filename.dat' using 1:($2*100)
и
n=2; plot 'filename.dat' using 1:(n*100)
дают разный результат.

sensel

Да, я прошу прощения, что удалил сообщение. Там просто был поток сознания. :)
Проблема возникает, когда я хочу предварительно выполнить некоторые манипуляции со значениями из колонки n (значение которой я заранее не знаю и только потом их визуализировать, а мне надо визуализировать сумму двух колонок, например n и n+1, но код plot "filename.dat" u 1:($n+$(n+1 не работает.
Видимо тебе нужно будет сделать plot / stats, затем вычисления и повторно replot.
P.S. Какая все-таки у тебя версия gnuplot? Команда gnuplot --version что пишет?

pfqneyf15

gnuplot 4.6 patchlevel 5

sensel

мне надо визуализировать сумму двух колонок, например n и n+1, но код plot "filename.dat" u 1:($n+$(n+1 не работает.
Будет проще подготовить данные заранее, а потом просто нарисовать с помощью gnuplot?
Как, например, здесь делают.
http://stackoverflow.com/questions/10698586/gnuplot-plot-dif...
P.S. Извини, я не слишком большой спец в gnuplot. Помог, чем мог. :)
Может кто-то ещё из форумчан подсобит.

pfqneyf15

Насчёт stat слышал, но что-то не вдупляю, как эта команда может мне помочь.
А не проще будет подготовить данные заранее, а потом просто нарисовать с помощью gnuplot?
Как, например, здесь делают.
http://stackoverflow.com/questions/10698586/gnuplot-plot-dif...
Кстати, paste я и так уже использую ;) именно оттуда и узнал, крутая вещь.
В принципе, количество итераций цикла у меня всего 7, поэтому вместо переменных в using я уже расписал всё явно. Просто хотелось знать, как это можно обойти.
Все равно спасибо тебе.

Lene81

column(n) не работает?

pfqneyf15

column(n)
Спасибо! Действительно, это то, что нужно! Код plot "filename.dat" u 1:(column(n)*100) работает!
Оставить комментарий
Имя или ник:
Комментарий: