Для окончательного представления статьи мне было предложено обновить мои данные, чтобы они соответствовали следующим спецификациям:
- осевые линии 0,25 мм
- осевые линии вокруг с тиками, стоящими в
- линии данных составляют 0,5 мм
- font 10pt
- цифры должны быть шириной 80 или 169 мм.
- должен быть 300 dpi
Что я пробовал:
library(ggplot2)
library(cowplot)
theme_set(theme_bw())
x <- rnorm(100)
mydata <- data.frame(x = x,
y = x^2 + runif(100),
z = rep(letters[1:4], 25))
p <- ggplot(data = mydata, aes(x, y)) +
geom_point(aes(color = z)) +
geom_smooth(color = 'black', se = FALSE, size = 0.5) +
theme(text = element_text(family = 'Times', size = 10, color = 'black'),
axis.ticks.length = unit(-0.1, 'cm'),
axis.text.x = element_text(margin = margin(t = 4, unit = 'mm')),
axis.text.y = element_text(margin = margin(r = 4, unit = 'mm')),
panel.grid = element_blank(),
axis.line = element_line(size = 0.25),
legend.position = c(0.5, 0.75))
p
ggsave(plot = p,
filename = 'myplot.png',
width = 80, height = 50, dpi = 300, units = 'mm')
p2 <- cowplot::plot_grid(plotlist = list(p, p, p, p), nrow = 1)
ggsave(plot = p2,
filename = 'mymultipleplot.png',
width = 169, height = 50, dpi = 300, units = 'mm')
Что возвращает следующие два графика:
Я могу выяснить, как обрабатывать некоторые из проблем здесь (например, положения легенды), но я испытываю трудности со следующим:
- Как я могу получить тики вокруг верхней и правой осей?
- Как я могу получить правильные размеры...
- Они выглядят намного больше, чем 10 pt. (загрузить их или открыть в новом окне, чтобы просмотреть немасштабированную версию)
- Размеры не поддерживаются на двух рисунках, несмотря на то, что они указаны в теме (шрифт, строка).
- Я не знаю, как подтвердить, что строки имеют правильный размер (в точках или мм)... делает
ggsave
собственное масштабирование?
update. Для моей текущей задачи я экспортировал файлы svg и отредактировал их в Inkscape. Потребовалось несколько часов, но было проще, чем заставить ggplot искажать спецификации.
Но было бы полезно знать, как это сделать программно в ggplot2.