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]()
Ответы
Ответ 1
Журналы настаивают на том, чтобы иметь конкретные размеры участка, чтобы избежать масштабирования. Если сделано, это может сделать размер шрифта слишком малым (или большим) и не соответствовать размеру шрифта подписи рисунка. Вот почему элементы сюжета (текст, размер точки и т.д.) По дизайну имеют одинаковый абсолютный размер независимо от размера 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_default("point", list(size=1.5))
theme_set(theme_grey(base_size=10))
Ответ 2
Как ни странно, вы можете сделать это с помощью 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
и посмотреть, что вы получите...
Ответ 3
Рассмотрите возможность использования width, height и pointize в функции 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()
}
Латексный код для проверки файлов, как они выглядят в одном документе:
\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}
Ответ 4
Опция одинаково хороша или лучше, чем PDF. Все журналы, с которыми я столкнулся, похожи на 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
, кажется, что это нравится только окнам.