Создание векторного изображения (т.е. метафайла) в R, пригодного для печати в Word 2007 - PullRequest
32 голосов
/ 04 марта 2012

Первое предостережение: я разместил этот вопрос здесь в SuperUser, но это явно неправильное место, чтобы задавать R вопросы.Я признаю, что это не является непосредственно вопросом программирования, но я считаю, что его можно решить, изменив способ создания графиков (то есть путем соответствующего кодирования).Поэтому я надеюсь, что читатели найдут это подходящим для форума.

R графики обычно состоят исключительно из элементов векторной графики (т.е. точек, линий, многоугольников, текста).R позволяет вам сохранять свою фигуру (или копировать-вставлять) в различных форматах, включая различные растровые форматы, в формате PDF или в виде метафайла Windows.

Обычно я сохраняю свои изображения в формате PDF и распечатываю их.Это делает изображения в точности такими, как я их представлял на бумаге, с высочайшим качеством.Я избегаю растровых форматов (например, JPG, TIFF) для печати, поскольку качество неизбежно ухудшается, а издатели предпочитают векторные форматы.

Однако мне нужно сделать большой многостраничный настольный опубликованный документ с использованием Microsoft Word 2007, ипоэтому использование PDF-файлов не вариант.Когда я импортирую свои рисунки из метафайлов или копирую и вставляю непосредственно из R в Word, рендеринг изображения на экране и печать меняются незначительно (например, полигоны и их заливки слегка смещаются).

Учитывая, что яХотите сохранить высокое векторное качество (и не использовать растровые форматы), что я могу сделать, чтобы векторная графика R работала с Word?(Конечно, Sweave и LaTeX были бы хороши, но опять же, это нереальный вариант).

Рассмотрим этот пример:

plot(c(1:100), c(1:100), pch=20)
## Copy and paste to Word 2007 as Windows metafile
## Print
## Quality is poorer (e.g. dot fills misaligned with borders)

pdf("printsPerfectly.pdf")
plot(c(1:100), c(1:100), pch=20)
dev.off()
## Now print PDF
## Quality is as expected

РЕДАКТИРОВАТЬ: В дополнение к предложениям @John я произвел его какпостскриптный файл EPS (см. ниже), вставленный в виде картинки в Word.Поскольку в конечном итоге он будет напечатан из PDF-файла, созданного из Word, я преобразовал его в PDF-файл с использованием настроек Word 2007 по умолчанию, напечатал его на своем лазерном принтере HP Laserjet P1606dn, а затем снял фотографию, чтобы проиллюстрировать проблему смещений границ полигонов и заливки (изображение слева, внизу).Я также произвел это непосредственно в формате PDF из R, используя pdf(), распечатал PDF и сделал фотографию (изображение справа внизу).

Illustration of misalignment (left) and perfection (right)

Может показаться, что маленькая картошка!Но когда вы добились большого количества хлопот, чтобы достичь высокого качества, разочаровывает, что в конце концов вам мешают.Кроме того, здесь это неочевидно, но цифры не такие качественные (слева), как в PDF (справа), несмотря на различия в фокусе на фотографии.

Ответы [ 5 ]

19 голосов
/ 26 июня 2015

Текущий лучший ответ, приведенный выше для меня, неприемлем, поскольку, если кто-то пытается создать хорошую векторную фигуру, последнее, что он хотел бы сделать, это просто растеризовать ее в растровое изображение ... Если это не невероятно сложный график, который требует возрастов для рендеринга в векторном формате или что-то в этом роде, но для большинства графиков это не так.

Лучшее решение - экспортировать в Word напрямую в собственный векторный формат Office. Я только что сделал новый пакет, export, который позволяет делать именно то, что позволяет экспортировать графики или статистические таблицы в Word и Powerpoint, см. https://cran.r -project.org / web / packages / export / index.html и для демонстрации см. https://github.com/tomwenseleers/export

Например:

install.packages("export")
library(export)

?graph2ppt
?graph2doc
?table2ppt
?table2doc

## export of ggplot2 plot
library(ggplot2)
qplot(Sepal.Length, Petal.Length, data = iris, color = Species, 
      size = Petal.Width, alpha = I(0.7))
# export to Word
graph2doc(file="ggplot2_plot.docx", width=7, height=5) 
# export to Powerpoint      
graph2ppt(file="ggplot2_plot.pptx", width=7, height=5)

enter image description here

Вы также можете экспортировать в расширенный метафайл, используя функцию

graph2emf(file="ggplot2_plot.emf", width=7, height=5)

но качество родного формата Office лучше.

Для окончательного производства вы также можете легко распечатать его в PDF из Powerpoint, если потребуется, и тогда он останется в векторном формате.

16 голосов
/ 04 марта 2012

Ваш единственный вариант - использовать растровую графику высокого разрешения.Как только вы достигнете 300 точек на дюйм, он будет совершенно неотличим от векторной печати;он просто создаст файлы большего размера. Ваш метод копирования и вставки работает с разрешением 72 dpi и будет выглядеть ужасно.Если вы импортируете из файла, вы можете получить разрешение в файле, и все будет намного лучше.К счастью, Office 2007 должен обрабатывать PNG-изображения, которые имеют наилучшее сжатие для типичных графиков.Допустим, вам нужно изображение шириной 4 "и высотой 6" ...

png('printsGreat.png', width = 4, height = 6, units = 'in', res = 300)
plot(c(1:100), c(1:100), pch=20)
dev.off()

Кроме того, предполагается, что Office 2007 способен обрабатывать файлы EPS, а файлы R postscript по умолчанию совместимы с EPS при печатиодна страница.

postscript("printsPerfectly.eps", width = 4, height = 6, horizontal = FALSE, onefile = FALSE)
plot(c(1:100), c(1:100), pch=20)
dev.off()

Но если вам не повезет с ними, вернитесь к изображению с высоким разрешением.

7 голосов
/ 06 ноября 2012

Мое предпочтительное решение состоит в том, чтобы использовать устройство метафайла Windows для печати, например ::100100

win.metafile("mygraph.wmf")
print(gg1)
dev.off()

Создает файл * .wmf, который можно скопировать в файл слова.

6 голосов
/ 07 декабря 2012

При вставке в PowerPoint пакет devEMF производит графику, которая выглядит лучше, чем wmf по умолчанию.

4 голосов
/ 13 ноября 2013

Так как я пытался произвести png с высоким разрешением в R, и это, похоже, не работало на моем ПК (если бы я установил разрешение выше, скажем, 300 dpi, R выдаст ошибку вроде «не могу запустить устройство png» ") я нашел способ сохранить рисунок с помощью postscript (), а затем с помощью GSView преобразовать файл ps в png с разрешением 600 точек на дюйм. MS Word с удовольствием использует png, а качество печати кажется превосходным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...