2013-01-19 3 views
3

У меня есть файл данных с несколькими столбцами, первые два указывают позицию, а остальные указывают другие свойства (например, количество отправленных с этой точки элементов). например:Вычисление с использованием нескольких переменных в gnuplot

1 1 1 57.11 
2 1 2 62.40 
3 4 1 31.92 

То, что я хочу сделать, это сюжет точки на позиции, но используются значения из других столбцов изменять тип точки и размер (например). Однако я не могу найти способ ссылки на столбцы в сюжете. Я знаю об использовании «переменной», но я не могу найти способ использовать несколько переменных.

То, что я хочу что-то вроде следующего:

plot "mydata" using 1:2 notitle with points pt ($3) ps ($4/10) 

так, что р и пс использовать значение для каждой точки, взятой из третьего и четвертого столбцов соответственно.

Возможно ли это в gnuplot? Есть какая-то работа?

ответ

4

Вы должны быть в состоянии использовать ключевое слово variable, чтобы сделать что-то вроде этого:

plot 'datafile' using 1:2:3:4 w points ps variable lc variable 

Или, возможно, отображающего значения в палитру:

plot 'datafile' using 1:2:3:4 w points ps variable lc palette 

переменных ключевого слова и/или палитры причин gnuplot, чтобы прочитать свойства из файла, и оба требуют дополнительный столбец для чтения через using. Конечно, все обычные вещи с помощью применяется - Вы можете применить преобразования к данным и т.д.:

plot 'datafile' using 1:2:3:($4+32.) w points ps variable lc palette 

Я не помню, с верхней части моей головы, будет ли третья колонка стать pointsize или цвет здесь, и у меня нет времени прямо сейчас, чтобы поиграть с ним, чтобы понять это. Вы можете поэкспериментировать и опубликовать комментарий, иначе я вернусь к этому, когда у меня будет время и добавлю обновление.


Некоторые из других свойств (например, pointtype) не может быть изменен достаточно легко, используя variable. Самый простой способ сделать это - использовать фильтры с тройным оператором gnuplot.

Во-первых, написать функцию, которая возвращает pointtype на основе данных от 1 столбце файла данных:

my_point_type(x) = x 

Здесь я использую простую тождественную функцию, но это может быть что угодно. Теперь вы можете цикл по pointtypes вы хотите (здесь 1-10), что делает сюжет для каждого:

plot [for PT=1:10] 'datafile' u 1:((my_point_type($3) == PT) ? $2:NaN) with points pt PT 

Это предполагает, что столбец с информацией pointtype является третьим колонком, и что второй столбец содержит информацию о положении , Это также можно сочетать с тем, что я продемонстрировал выше.

+0

Я пытался использовать «переменную» несколько раз, однако кажется, что только некоторые из параметров принимают его.Например, ps доволен переменной, однако pt не является, и использование его с другими параметрами дает ту же ошибку: 'undefined variable: variable' Вдоль этой строки ive также попытался использовать именованные переменные, как показано в примере где-нибудь: (Я нашел этот пример вчера вечером, но я не смог найти его сегодня утром) 'plot 'datafile" используя 1: 2: (myvar1 = $ 3) :(myvar2 = $ 4) notitle с точками pt myvar1 ps myvar2', который просто дает такая же неопределенная переменная ошибка. – OverlordAlex

+0

@OverlordAlex - Ах, извините, я видел 'pt', и я просто предположил, что вы пытаетесь изменить цвет. Нет, нет способа изменить точечный тип. Единственное решение - это отфильтровать данные в разных точечных типах. Я буду обновлять, когда получаю время ... – mgilson

+0

@OverlordAlex - Я обновил. Возможно, вы имели в виду '... используя 1: 2: (myvar = $ 3, $ 3) :(myvar = $ 4, $ 4) ...' Я не уверен, что это сработает. – mgilson

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