2014-01-31 1 views
20

Хотя R-графики, отправленные в PDF, могут быть перемасштабированы по желанию в программном обеспечении для иллюстрации или макета страницы, научные журналы часто настаивают на том, что предоставленные графики имеют конкретные размеры.R Элементы графика масштаба в формате PDF с заданной шириной и высотой

Можно ли масштабировать размер всех элементов чертежа в заданном формате PDF непосредственно в R?

require(ggplot2) 

p <- qplot(data=iris, 
      x=Petal.Width, 
      y=Petal.Length, 
      colour=Species) 

pdf("./test_plot_default.pdf") 
print(p) 
graphics.off() 

Производит адекватное масштабирование сюжетных элементов

test plot with default pdf size

Однако изменение элементов размера PDF не вызывает сюжетные элементы в масштабе. При меньших PDF-файлах элементы графика слишком увеличены по сравнению с пространством заговора.

pdf("./test_plot_dimentionsions required by journal.pdf", width=3, height=3) 
print(p) 
graphics.off() 

enter image description here

Использование @Rosen Matev предложение:

update_geom_default("point", list(size=1)) 
theme_set(theme_grey(base_size=6)) 
pdf("./test_plot_dimentionsions required by journal.pdf", width=3, height=3) 
print(p) 
graphics.off() 

enter image description here

+0

Я хотел бы продолжать использовать 'PDF()' поскольку он позволяет мне легко создавать PDF-документ со многими графиками. –

+0

Я не понимаю вопроса. текстовые, точечные, линейные размеры измеряются в абсолютных (физических) единицах, специально предназначенных для того, чтобы сделать их независимыми от размера устройства (при условии, что вы не перемасштабируете изображение впоследствии). Разве это не то, что вы хотите? – baptiste

+3

Я понимаю преимущество наличия всех измерений в абсолютных единицах. Есть ли способ сделать размер всех элементов масштабируемым с размером устройства? Или мне нужно использовать внешнее программное обеспечение для последующего масштабирования PDF-файла. –

ответ

3

Как ни странно, вы можете сделать это с scale= в ggsave(...)

require(ggplot2) 
p <- qplot(data=iris, x=Petal.Width, y=Petal.Length, colour=Species) 
ggsave("test.1.pdf",p) 
ggsave("test.2.pdf",p, width=3, height=3, units="in", scale=3) 

Попробуйте сыграть с параметром scale и посмотреть, что вы получите ...

+6

Хотя это и дает неплохой график, он имеет те же проблемы, что и в pdf() выше. Команда 'ggsave (" test.2.pdf ", p, width = 3, height = 3, units =" in ", scale = 3)' не создает 3 "x3" pdf, а скорее 9 "x9" PDF. Похоже, что параметр scale переопределяет параметры ширины и высоты. 'ggsave (" test.2.pdf ", p, width = 3, height = 3)' создает 3 "x3" график, но имеет те же проблемы, что и файл 'pdf()'. –

6

Журналы настаивают на том, чтобы иметь конкретные размеры участка во избежание масштабирования. Если сделано, это может сделать размер шрифта слишком малым (или большим) и не соответствовать размеру шрифта подписи рисунка. Вот почему элементы сюжета (текст, размер точек и т. Д.) По дизайну имеют одинаковый абсолютный размер независимо от размера pdf.

Вы можете изменить размер шрифта по умолчанию и точку размера в, например, с:

p <- ggplot(iris, aes(x=Petal.Width, y=Petal.Length, colour=Species)) + 
    geom_point(size=1.5) + # default is 2 
    theme_grey(base_size=10) # default is 12 
ggsave("test.1.pdf", p) 

Значения по умолчанию могут быть изменены во всем мире тоже:

update_geom_defaults("point", list(size=1.5)) 
theme_set(theme_grey(base_size=10)) 
+1

'update_geom_default()' отсутствует 's':' update_geom_defaults() ' – Flo

0

Опцион одинаково хорошо или лучше, чем pdf - tiff. Все журналы, с которыми я столкнулся, похожи на tiff.

tiff(filename="name.tiff", width=5, height=5, units="in", 
    pointsize=8, compression="lzw", bg="white", res=600, 
    restoreConsole=TRUE) 
qplot(data=iris, x=Petal.Width, y=Petal.Length, colour=Species) 
dev.off() 

Если вы находитесь на Linux, падение restoreConsole=TRUE, кажется, только окна нравится.

+1

Векторная графика всегда печатается лучше, чем растровая графика. Даже если разрешение изображения равно разрешению принтера, в любом случае во время процесса должно быть только малейшее масштабирование, и все сломается. – morty

3

Рассмотрите использование высоты и pointsize в формате PDF функции ширина,().

Если вы предпочитаете использовать pdf() вместо других способов, например, использовать sweave, то лучше использовать функцию pdf с большим количеством аргументов, например, ниже (у меня нет ggplot2, так что поставляется с simillar).

# making scaled plot in pdf 
# using paper=a4 just to see the efect 

for (sc in c(0.5,0.75,1)) { 
pdf(width=7*sc,height=7*sc,pointsize=12*sc,file=paste("scale",sc,".pdf",sep=""),paper="a4") 
plot(sin((1:314)/100),main=paste("PDF sc",sc)) 
dev.off() 
} 

Это вполне применимо, но работает в некоторой степени. Когда масштаб слишком мал, в формате pdf начнет применяться ширина линии, шрифт и т. Д.

Просмотреть результаты в масштабе * .pdf, созданный на примере.

И ggplot2 ...

sc <- c(0.5,0.75,1) 
fi <- c("pic1.pdf","pic2.pdf","pic3.pdf") 

require(ggplot2) 
p <- qplot(data=iris, 
x=Petal.Width, 
y=Petal.Length, 
colour=Species) 

for (i in 1:3) { 
pdf(width=7*sc[i],height=7*sc[i],pointsize=12*sc[i],file=fi[i]) 
print(p) 
dev.off() 
} 

Latex код для проверки файлов, как они выглядят в одном документе:

\documentclass[a4paper,11pt]{report} 
\usepackage[T1]{fontenc} 
\usepackage[utf8]{inputenc} 
\usepackage{graphics} 

\begin{document} 

\begin{figure} 
    \includegraphics{pic1.pdf} 
\end{figure} 

\begin{figure} 
    \includegraphics{pic2.pdf} 
\end{figure} 

\begin{figure} 
    \includegraphics{pic3.pdf} 
\end{figure} 

\end{document} 
+1

Это настраивает как размер, так и размер PDF. К сожалению, установление размера PDF и настройка в зависимости от размера не решают мою проблему, так как не все параметры, создаваемые ggplot, масштабируются с помощью pointize. –

+0

Правильно, я тоже подумал, что это может быть случай всех систем на основе «сетки». Или это только ggplot? –

Смежные вопросы