Получение векторной графики от PROC SGPLOT в PDF - PullRequest
3 голосов
/ 10 марта 2012

У кого-нибудь есть советы по получению чистого вывода PDF из PROC SGPLOT (и аналогичных функций, таких как SGSCATTER)?

Когда я создаю график и записываю его в PDF с ODS, результат выглядит хорошо в SAS EGокно отчета, но вывод PDF растеризован до значения DPI в PDF, поэтому, если вы увеличите масштаб PDF, вы сможете увидеть пикселизацию.Кроме того, если я не определяю цвета / стили линий, при выводе в PDF будут использоваться разные цвета и стили (линии, которые были сплошными в окне отчета sas, будут штриховыми в PDF).

Если я сделаютот же график с PROC GPLOT, он поставляется с векторизованным текстом и линиями, которые не похожи на мусор при увеличении / распечатке.

Есть ли вариант, который мне нужно изменить?Какой флаг мне нужно установить?Я пробовал что-то вроде OPTIONS DEVICE=SVG, и это не сработало.Установка действительно высокого DPI также не очень хорошее решение.

Пример кода (но на самом деле это происходит со всеми функциями SG * с любыми данными / кодом):

options nonumber orientation=landscape;
ods pdf file='FILENAME.pdf' notoc;

proc sgplot data=shipped;
  series x=date y=weighted_price / group=type;
run;

proc gplot data=shipped;
  plot weighted_price*date=type;

symbol1   c=blue      i=join v=none w=1 l=1;
symbol2   c=red       i=join v=none w=1 l=1;
symbol3   c=brown     i=join v=none w=1 l=1;
run; ods pdf close;

Они дают примерно эквивалентные графики в окне результатов sas EG (за исключением того, что SGPLOT выглядит лучше), но когда они оказываются в PDF, SGPLOT растеризуется в изображение и помещаетсястраница PDF, а GPLOT - прекрасная векторная диаграмма.

РЕДАКТИРОВАТЬ: см. решения, которые я разместил ниже.Я не нашел, чтобы это было хорошо документировано, но SAS 9.2 не имел очень хорошей поддержки PDF.Есть несколько обходных путей, которые подходят для одноразовой диаграммы, но лучшее решение - это просто обновить до SAS 9.3.

Ответы [ 3 ]

4 голосов
/ 21 июля 2012

Вот минимальный пример (код sgplot взят из документации sas):

ods graphics / imagefmt=pdf;
ods pdf file = 'c:\temp\report.pdf';

proc sgplot data=sashelp.class;
  scatter x=height y=weight;
  ellipse x=height y=weight;
run;

ods pdf close;

Фрагмент imagefmt=pdf говорит SAS создать само изображение в формате PDF, вместо добавления растрового png в отчет pdf. Этот фрагмент должен создать файл с именем report.pdf в вашем каталоге c: \ temp. Изображение в нем масштабируемое.

В ссылках ниже много чего еще.

Управление именем изображения и форматом изображения

Использование PROC SGPLOT для быстрых высококачественных графиков

0 голосов
/ 31 января 2013

Я наконец-то решил это. Есть несколько способов такой работы, и один способ действительно работает.

«Идеальное» решение - это обновление до SAS 9.3; SAS 9.2 не может преобразовать диаграммы SGPLOT / SGPANEL в векторный PDF-файл. Выполнение того же кода в SAS 9.3 создает идеально выглядящие диаграммы.

Я нашел два других частичных решения:

1: в руководстве для предприятия вы можете настроить параметры дисплея, а если все правильно, вы можете распечатать окно отчета SAS и использовать принтер Adobe PDF. Это работает нормально, хотя вывод иногда выглядит очень ненадежным.

2: ods latex file='file.tex' gout='/.../'; (установите подагру = в выходной каталог). Это приводит, по крайней мере, в Unix 9.2, к мусорному файлу TeX, который не имеет разрывов строк и, похоже, на самом деле не ссылается на графики. Он также создает файл PostScript для каждого графика! Вы можете использовать этот файл .ps с Distiller (или TeX) для создания достойно выглядящих векторных диаграмм. Они хорошо печатаются, хотя я обнаружил, что SAS 9.3 PDF выглядит намного лучше на экране, чем .ps из этого метода.

0 голосов
/ 10 марта 2012

Возможно, вы сможете улучшить качество с помощью драйверов печати Adobe.Я нашел этот пример на веб-сайте SAS много лет назад, пытаясь решить другую проблему, но он может работать и для вашей проблемы.

options sysprint='Acrobat PDFWriter'
        'k:\ruzsa\users\pdf\pdfwriter.pdf';   /* <- Edit to the location of your driver. */
goptions reset=all device=winprtc;
...