R: Импорт векторной графики на график. Не удается заставить grImport создавать значимый XML.
Я пытаюсь импортировать векторную графику с помощью пакета grImport, но столкнулся с проблемой, которую не могу решить (несмотря на то, что трачу весь день на Интернет, в том числе и здесь!)...
Я установил Ghostscript и преобразовал свое изображение.png в файл.ps (и проверил, не является ли это причиной сбоя, путем преобразования изображений.jpg и.pdf - но с тем же результатом).
Вот пример моего.png файла: простой кросс png
И пример файла.ps после того, как я его преобразовал: простой кросс ps
Я не получаю сообщений об ошибках при запуске:
PostScriptTrace("cross.ps")
img <- readPicture("cross.ps.xml")
Однако если я попытаюсь использовать изображение на графике, изображение не будет отображаться.
Проследив это, я обнаружил, что файл.XML, созданный PlotScriptTrace, не содержит путей:
str(img)
>Formal class 'Picture' [package "grImport"] with 2 slots
..@ paths : Named list()
..@ summary:Formal class 'PictureSummary' [package "grImport"] with 3 slots
.. .. ..@ numPaths: num 0
.. .. ..@ xscale : Named num [1:2] 99999 -99999
.. .. .. ..- attr(*, "names")= chr [1:2] "xmin" "xmax"
.. .. ..@ yscale : Named num [1:2] 99999 -99999
.. .. .. ..- attr(*, "names")= chr [1:2] "ymin" "ymax"
Поэтому, я думаю, что есть проблема, когда я вызываю PostScriptTrace() или readPicture(), но я не знаю, как выяснить, что и как делать дальше.
Вот мой sessionInfo(), если это помогает:
R version 3.3.0 (2016-05-03)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.6 (El Capitan)
locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8
attached base packages:
[1] grid stats graphics grDevices utils datasets methods
[8] base
other attached packages:
[1] grImport_0.9-0 XML_3.98-1.4
Обратите внимание, что моя проблема идентична: R: Импорт векторной графики на график - Не удается заставить grImport работать, но ответ на этот предыдущий вопрос мне не помог - он указывает, что файл XML не был скомпилирован правильно, и я уже разобрался.
Может кто-нибудь указать, где я иду не так, пожалуйста?
1 ответ
Перемещен к ответу, слишком велик для комментариев.
Я пытаюсь импортировать файл.ps, который я считаю векторной графикой?
ОК. Это неправильное представление, программы PostScript могут содержать как векторные, так и растровые данные. Очевидно, что если вы начнете с растровых данных (PNG, JPEG, TIFF и т. Д.), То эквивалентная программа PostScript просто будет содержать те же растровые данные (сжатие по модулю).
Заглянув в опубликованную вами программу PostScript, мы можем увидеть обычный всесторонний заголовок PostScript с устройства ghostscript ps2write, за которым следует настоящая программа:
%%EndPageSetup
5 0 obj
<</Length 156041>>stream
q 0.12 0 0 0.12 0 0 cm
q 3950 0 0 5341.67 508.333 833.333 cm
BI
/CS/RGB
/W 1422
/H 1923
/BPC 8
/F[/A85
/LZW]
ID
J3Vsg3$]7K#D>EP:q1$o*=mro@So+\<\5,H7Uo<*jE<[.O@Wn[3@'nb-^757;Rp>H>q_R=AlC^c
...
...
=Z;P44-S>^PSliQ=\"^E99e+*Po3Mc=]UKU!W~>
EI Q
Q
endstream
endobj
pagesave restore
%%PageTrailer
%%Trailer
end
%%EOF
Функция ID (определенная в прологе) рисует следующие встроенные данные в виде растрового изображения. Затем следуют растровые данные, и программа выдает страницу, очищает ее и завершает работу.
Так что там вообще нет векторных данных, что неудивительно, поскольку исходные данные не были векторными.
Я ничего не знаю о R, но из вопросов, которые я вижу, я предполагаю, что он не может обрабатывать растровые данные, поэтому вы получаете пустой вывод.