Построение числовых данных из файла (No.2)
Как разместить несколько наборов данных в одном файле?
Для хранения постороений нескольких данных в одном файле используется using и index. Здесь "данные" означает можество пар (X,Y). Gnuplot рисует линию или пишет один и тот же символ в каждой точке данных.
Когда данные имеют одинаковые значения X, представленные в виде таблицы, используется опция using для задания значений Y. Следующий пример содержит три значения Y с одинаковыми значениями X.
Когда значения X различны, все данные разделяются на несколько блоков, разделенные двумя пустыми строками. (Примечание: здесь мы используем термин "блок" для набора точек данных в общем содержании, это отличается от gnuplot определения "блок данных". Блок данных в gnuplot является набор точек данных, разделенных одной пустой линией.)
Как вы можете видеть, все данные различных блоков данных взяты с одной линии/одного типа символа. Чтобы сделать их различными, необходимо указать блок данных с помощью index. Первый блок данных имеет индекс 0, второй - 1, и т.д.
Можно указать диапазон индекса. Например, для использования одинаковых символов в первом и втором блоках, причем изменив символ третьего блока:
Я хочу изменять значения данных в моем файле при постороении
Можно сделать простые расчеты и изменить данные в столбце, который определяется функцией using. В следующем примере будет показанно одновременное выполнение четырех расчетов --- сами значения Y, значения Y дублированны, в квадрате и логарифмированы.
Указывается n-ый столбец $n и совершаются некоторые операции. Выражение должно быть введено в скобках. Выражение using 1:sqrt($2) не работает. Возможны расчеты, затрагивающие несколько столбцов. Например, using 1:2:($2*$3) дает произведение второго и третьего столбцов.
Этот метод полезен когда есть файл данных, содержащий неопределенности и погрешности(%) в значениях Y. Для того чтобы изобразить погрешности, необходимо чтобы неопределенности данных были абсолютными. Для преобразования неопределенностей в абсолютные используется using 1:2:($2*$3/100.0), где второй столбец - значения Y, а третий - погрешность(%).
Я хочу записать некоторые команды построений в файл данных
Gnuplot использует 2 файла, один для данных, второй для управляющих команд. Если данные не сложны, можно поместить команды построений в файл с самими данными. Это представляет собой обычный файл с командами построения, но данные, которые необходимо построить, не находятся во внешнем файле, а обозначены "-", за которым следует массив данных. Gnuplot останавливает чтение данных когда строка начинается символом "e" (в качестве примера дано слово end).
Подготовка контрольного файла с данными представленными выше, имя задается как параметр командной строки при вызове gnuplot .
Использование команды replot в данном методе невозможно. Gnuplot пытается прочитать данные из стандартного ввода снова, потому что gnuplot не запоминает данные.
Я хочу устранить некоторые точки данных
Есть 2 способа пропускать данные в файле: первый заключается в редактировании файла данных, в качестве альтернативы можно использовать опцию every option. Чтобы пропустить некоторые точки данных в файле, необходимо перед числом поставить некоторый символ "?". Этот символ определяется командой set missing , но символы, которые не могут быть преобразованны в числа, могут обрабатываться тоже.
Следующий пример показывает преобразование двух графиков (X,Y1) и (X,Y2).
test1.dat test2.dat
В левой таблице второе значение X имеет знак "?", поэтому вторая точки данных (2.0,1.8) и (2.0,0.8) пропускаются. В правой таблице, точка (2.0,1.8) остается, но точка (2.0,0.8) пропускается.
Эта функция полезна, когда необходимо изменить диапазон построений из таблицы с данными. Построим следующие данные в логарифмический шкале, второй и третий столбец строятся одновременно.
Значения Y1 в диапазоне X[1:3] равны нулю, поэтому взятие логарифма невозможно. Gnuplot проводит вертикальные линии в нижней точке, которая имеет положительное значение (здесь это X=4).
Чтобы удалить вертикальную линию, необходимо поставить символ "?" перед Y1=0.0, таким образом "?0.0". Тогда значения Y1 (красная линия) не рассматриваются и данные начинаются на X=4. То же можно сделать с помощью опции команды every ::3. См. следующую тему.
Как записать в файл часть построенных данных?
Для того чтоб указать диапазон данных, которые будут построены, используется опция every Чтобы пропускать каждые 2 линии, записывается plot "test.dat" every 2 .
Если файл данных содержит несколько блоков, разделенных одной пустой строкой, то можно пропустить блок данных с помощью опции every Чтобы пропустить один раз 2 блока, пишется plot "test.dat" every :2.
В качестве альтернативы (если используется UNIX-подобная система), часть файла данных может быть построенна с помощью команды, "head" и "tail".