-не так Часто Задаваемые Вопросы- обновлено 2010/12/26
|
|
not so FAQ |
Построение числовых данных из файла (No.2)Как разместить несколько наборов данных в одном файле?Для хранения постороений нескольких данных в одном файле используется using и index. Здесь "данные" означает можество пар (X,Y). Gnuplot рисует линию или пишет один и тот же символ в каждой точке данных. Когда данные имеют одинаковые значения X, представленные в виде таблицы, используется опция using для задания значений Y. Следующий пример содержит три значения Y с одинаковыми значениями X. # X Y1 Y2 Y3 -1.0000 0.0000 0.0000 1.0000 -0.9000 0.5700 1.1769 0.7150 -0.8000 1.0800 1.4400 0.4600 -0.7000 1.5300 1.4997 0.2350 -0.6000 1.9200 1.4400 0.0400 -0.5000 2.2500 1.2990 -0.1250 -0.4000 2.5200 1.0998 -0.2600 -0.3000 2.7300 0.8585 -0.3650 -0.2000 2.8800 0.5879 -0.4400 -0.1000 2.9700 0.2985 -0.4850 0.0000 3.0000 -0.0000 -0.5000 0.1000 2.9700 -0.2985 -0.4850 0.2000 2.8800 -0.5879 -0.4400 0.3000 2.7300 -0.8585 -0.3650 0.4000 2.5200 -1.0998 -0.2600 0.5000 2.2500 -1.2990 -0.1250 0.6000 1.9200 -1.4400 0.0400 0.7000 1.5300 -1.4997 0.2350 0.8000 1.0800 -1.4400 0.4600 0.9000 0.5700 -1.1769 0.7150 1.0000 0.0000 -0.0000 1.0000 gnuplot> plot "test.dat" using 1:2 with lines,\ "test.dat" using 1:3 with lines,\ "test.dat" using 1:4 with lines Когда значения X различны, все данные разделяются на несколько блоков, разделенные двумя пустыми строками. (Примечание: здесь мы используем термин "блок" для набора точек данных в общем содержании, это отличается от gnuplot определения "блок данных". Блок данных в gnuplot является набор точек данных, разделенных одной пустой линией.) # X Y Yerror 1.0 1.2 0.1 2.0 1.8 0.1 3.0 1.6 0.1 1.1 0.8 0.2 2.1 0.3 0.2 3.1 1.0 0.2 1.2 1.5 0.3 2.2 2.3 0.3 3.2 3.1 0.3 gnuplot> plot "test.dat" using 1:2 with lines gnuplot> plot "test.dat" using 1:2:3 with yerrorbars Как вы можете видеть, все данные различных блоков данных взяты с одной линии/одного типа символа. Чтобы сделать их различными, необходимо указать блок данных с помощью index. Первый блок данных имеет индекс 0, второй - 1, и т.д. gnuplot> plot "test.dat" index 0 using 1:2:3 with yerrorbars,\ "test.dat" index 1 using 1:2:3 with yerrorbars,\ "test.dat" index 2 using 1:2:3 with yerrorbars Можно указать диапазон индекса. Например, для использования одинаковых символов в первом и втором блоках, причем изменив символ третьего блока: gnuplot> plot "test.dat" index 0:1 using 1:2:3 with yerrorbars,\ "test.dat" index 2 using 1:2:3 with yerrorbars Я хочу изменять значения данных в моем файле при постороенииМожно сделать простые расчеты и изменить данные в столбце, который определяется функцией using. В следующем примере будет показанно одновременное выполнение четырех расчетов --- сами значения Y, значения Y дублированны, в квадрате и логарифмированы. # X Y 1.0 1.2 2.0 1.8 3.0 1.6 gnuplot> plot "test.dat" using 1:2 with points,\ "test.dat" using 1:($2*2) with points,\ "test.dat" using 1:(sqrt($2)) with points,\ "test.dat" using 1:(log($2)) with points Указывается 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). set xrange [0:5] set yrange [0:3] plot "-" using 1:2:3 w yerrorbars # X Y Z 1.0 1.2 0.2 2.0 1.8 0.3 3.0 1.6 0.2 4.0 1.2 0.2 end pause -1 Подготовка контрольного файла с данными представленными выше, имя задается как параметр командной строки при вызове gnuplot . % gnuplot "test.plt" Использование команды replot в данном методе невозможно. Gnuplot пытается прочитать данные из стандартного ввода снова, потому что gnuplot не запоминает данные. Я хочу устранить некоторые точки данныхЕсть 2 способа пропускать данные в файле: первый заключается в редактировании файла данных, в качестве альтернативы можно использовать опцию every option. Чтобы пропустить некоторые точки данных в файле, необходимо перед числом поставить некоторый символ "?". Этот символ определяется командой set missing , но символы, которые не могут быть преобразованны в числа, могут обрабатываться тоже. Следующий пример показывает преобразование двух графиков (X,Y1) и (X,Y2).
В левой таблице второе значение X имеет знак "?", поэтому вторая точки данных (2.0,1.8) и (2.0,0.8) пропускаются. В правой таблице, точка (2.0,1.8) остается, но точка (2.0,0.8) пропускается. gnuplot> plot "test1.dat" using 1:2 with linespoints,\ "test1.dat" using 1:3 with linespoints gnuplot> plot "test2.dat" using 1:2 with linespoints,\ "test2.dat" using 1:3 with linespoints Эта функция полезна, когда необходимо изменить диапазон построений из таблицы с данными. Построим следующие данные в логарифмический шкале, второй и третий столбец строятся одновременно. # X Y1 Y2 1.0 0.0 0.1 2.0 0.0 0.1 3.0 0.0 0.1 4.0 0.1 0.2 5.0 0.6 0.4 6.0 1.0 0.9 7.0 1.2 1.7 8.0 1.3 2.4 Значения 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". gnuplot> plot "< head -10 test.dat" using 1:2 with lines gnuplot> plot "< tail -3 test.dat" using 1:2 with lines gnuplot> plot "< head -5 test.dat" using 1:2 with lines,\ > plot "< tail -5 test.dat" using 1:2 with points Первая команда "plot" построить первые 10 строк "test.dat", вторая команда "plot" показывает последние 3 строки файла данных. Сдедующие строки являются примером построения графика из файла данных "test.dat" --- первые 5 точек изображены линиями, а последние пять точек - символами. from an Iwata-kun's question. Thanks !
|