For a final article submission I have been asked to update my figures so that they meet the following specifications:
- axis lines are 0.25 mm
- axis lines all around with ticks facing in
- data lines are 0.5 mm
- font is 10pt
- figures should be 80 or 169 mm wide
- must be 300 dpi
What I've tried:
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')
Which returns the following two plots:
I can figure out how to handle some of the issues here (e.g. legend positions), but am having difficulty with the following:
- How can I get ticks around top and right axes?
- How can I get the sizes correct ...
- These look much bigger than 10 pt. (download them or open in new window to see unscaled version)
- The sizes are not maintained in the two figures despite being specified in the theme (font, line).
- I don't know how to confirm that the lines are the correct size (in points or mm)... does
ggsave
do its own scaling?
update For my present task I exported as svg files and edited them in Inkscape. It took a few hours but was easier than getting ggplot to contort to the specifications.
But, it would be helpful to know for the future how to do this programmatically within ggplot2.
sec.axis
argument inscale_
in ggplot 2.2.0. Try e.g.ggplot(mpg, aes(displ, hwy)) + geom_point() + scale_x_continuous(sec.axis = dup_axis()) + scale_y_continuous(sec.axis = dup_axis())
. – Henrik