GNUPLOT

-не так Часто Задаваемые Вопросы-

обновлено 2010/12/26

После построения (No.3)

1 | 2 | 3

Как изменить цвета на рисунке PostScript?

Непосредственно из gnuplot нет возможности задать цвет линий и символов. Один из самых простых способов – сделать объект Tgif, установив set term tgif , и изменить фигуру с Tgif, после сохранить его в цветном формате PS.

Вот хитрый способ изменения цвета. Изменить postscript файл вручную. PS файл генерированный gnuplot довольно легко читается. Следующая команда gnuplot позволят получить индекс цвета. Команда test так же дает индекс цвета.

gnuplot> set term postscript enhanced color 
gnuplot> set output "colorindex.ps"
gnuplot> set size 0.5,0.5
gnuplot> set noborder
gnuplot> set nokey
gnuplot> set linestyle  1 linetype  1 linewidth 8
gnuplot> set linestyle  2 linetype  2 linewidth 8
gnuplot> set linestyle  3 linetype  3 linewidth 8
gnuplot> set linestyle  4 linetype  4 linewidth 8
gnuplot> set linestyle  5 linetype  5 linewidth 8
gnuplot> set linestyle  6 linetype  6 linewidth 8
gnuplot> set linestyle  7 linetype  7 linewidth 8
gnuplot> set linestyle  8 linetype  8 linewidth 8
gnuplot> set linestyle  9 linetype  9 linewidth 8
gnuplot> set linestyle 10 linetype 10 linewidth 8
gnuplot> # for gnuplot ver.4
gnuplot> # set style line 1 line type 1 linewidth 8
gnuplot> # ... etc
gnuplot> set noxtics
gnuplot> set ytics nomirror 1
gnuplot> set yrange [ -1.5 : 10.5 ]
gnuplot> plot  1 w l ls  1,  2 w l ls  2,  3 w l ls  3, 4 w l ls  4,\
gnuplot>       5 w l ls  5,  6 w l ls  6,  7 w l ls  7, 8 w l ls  8,\
gnuplot>       9 w l ls  9, 10 w l ls 10, -1 w line -1, 0 with line 0
gnuplot> pause -1

В терминале PostScript определены 10 типов линий, пронумерованные от 1 до 9. Представленные выше функции y=1 - y=10 отображают различные типы линий. Для того чтоб явно увидеть цвет, используются очень толстые линии.

Сделайте то же самое с ч/б PostScript. Удалите опцию color и сохраните результат в "monoindex.ps". Можно будет увидеть разницу между "colorindex.ps" и "monoindex.ps" с использованием разных команд UNIX. Разница заключается только в одной линии, /Color true def и /Color false def . Поэтому есть возможность выбрать ч/б цвет и без использования Gnuplot путем редактирования опции /Color {true |false}.

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

/LT0 {PL [                                         ] 1   0   0   DL} def
/LT1 {PL [4 dl 2   dl                              ] 0   1   0   DL} def
/LT2 {PL [2 dl 3   dl                              ] 0   0   1   DL} def
/LT3 {PL [1 dl 1.5 dl                              ] 1   0   1   DL} def
/LT4 {PL [5 dl 2   dl 1 dl 2 dl                    ] 0   1   1   DL} def
/LT5 {PL [4 dl 3   dl 1 dl 3 dl                    ] 1   1   0   DL} def
/LT6 {PL [2 dl 2   dl 2 dl 4 dl                    ] 0   0   0   DL} def
/LT7 {PL [2 dl 2   dl 2 dl 2 dl 2 dl 4 dl          ] 1   0.3 0   DL} def
/LT8 {PL [2 dl 2   dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL} def

Эти линии соответствуют типам от 1 до 9. Три числа в LT0, "1 0 0" определяет цветовой режим RGB (красный, зеленый и синий). LT0 обозначает красный цвет, LT1 - зеленый, LT2 - синий...при значениях (1,0,1) - пурпурный, (0,1,1) - голубой, (1,1,0) - желтый, (0,0,0) - черный, (1,0.3,0) – оранжевый и (0.5,0.5,0.5) - серый. Благодаря этому можно изменять цвет линий путем изменения значений RGB.

Чтобы сделать градацию от красного до желтого, установите R=1, Blue=0 и постепенно изменяйте G от 0 до 1.

/LT0 {PL [                                         ] 1   0    0   DL} def
/LT1 {PL [4 dl 2   dl                              ] 1   0.1  0   DL} def
/LT2 {PL [2 dl 3   dl                              ] 1   0.2  0   DL} def
/LT3 {PL [1 dl 1.5 dl                              ] 1   0.3  0   DL} def
/LT4 {PL [5 dl 2   dl 1 dl 2 dl                    ] 1   0.4  0   DL} def
/LT5 {PL [4 dl 3   dl 1 dl 3 dl                    ] 1   0.5  0   DL} def
/LT6 {PL [2 dl 2   dl 2 dl 4 dl                    ] 1   0.6  0   DL} def
/LT7 {PL [2 dl 2   dl 2 dl 2 dl 2 dl 4 dl          ] 1   0.7  0   DL} def
/LT8 {PL [2 dl 2   dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1   0.8  0   DL} def

Первое изображение генерируется с использованием gnuplot, второе – редактированием PS файла. При помощи этого метода можно использовать любые цвета для фигуры. Автоматическое преобразование этих цветов может быть достигнуто при помощи программ perl или sed.

fig/sample8.4a PS цвета генерированные Gnuplot
fig/sample8.4b Редактирование PS файла

Теперь вернемся к postscript данным приведенным выше, можно заметить "[4 dl 2 dl]" определяющий пунктирную линию, штрих-пунктирную и штриховую линии. Для LT1 шаблон задается как "[4 dl 2 dl]". Рисуется сплошная линия длиной в 4 единицы с интервалами длиной 2 единицы, поэтому она становиться пунктирной. "[5 dl 2 dl 1 dl 2 dl]" определяет сплошную линию длиной 5 единиц, с интервалами 2 длиной 2 единицы и линий длиной в одну единицы с интервалами в 2 единицы и т.д. При необходимости есть возможность создать свой собственный тип линий.

В файле PS можно обнаружить 2 строки, которые указаны выше основных линий LT0-LT8.

/LTb { BL [] 0 0 0 DL } def
/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def

LTb линии используются для границ графика, а LTa для нулевой оси. Основной цвет в RGB "0 0 0" – черный, но есть возможность его изменить.

up

Я хочу удалить правую грань из квадратной фигуры.

Квадратная фигура рисуется при помощи команды set size square . Однако, созданные в gnuplot EPS файлы не имеют квадратной формы, но все же прямоугольные и с дополнительной гранью. Причина в том, что gnuplot определяет BoundingBox с целью охватить весь экран. Для того чтобы избавиться от правой грани, необходимо отредактировать EPS файл вручную. BoundingBox определяется в верхней части EPS файла.

%%BoundingBox: 50 50 410 302

Значение "410" слишком большое, поэтому уменьшаем его. Соответствие координат BoundingBox зависит от подписей и граней, так что можно найти лучший вариант после некоторых проб и ошибок.

Если работать на Unix или Linux и система имеет GhostScript, тогда можно использовать команды ps2ps, eps2eps Эти скрипты конвертируют PostScript графики сгенерированные на gnuplot в более правильный PS файл. Так же есть возможность настроить BoundingBox при помощи следующей команды:

% eps2eps input.eps output.eps
from Russell in Universiteit van Amsterdam. Thanks !
up