熟悉 R 绘图的朋友肯定知道,在普通绘图中,图片的大小可以直接在 png()pdf() 中指定,而绘图区大小则可以用 par() 中的 marmai 来指定。

但是在 ggplot2 中,图片大小依然可以在 pngpdf 中设定,但是边界大小, par 函数似乎就不奏效了。至今天探索,才发现原来这个参数隐藏在 theme 中,其名为 plot.margin

1. 原图

  1. library(ggplot2)
  2. library(ggthemes)
  3. p <- ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour=factor(cyl))) + guides(color=F)
  4. p <- p + theme_solarized(light=FALSE) + scale_colour_solarized('blue')
  5. ggsave("test0.png", units="in", dpi=300, width=4, height=4, device="png")

test0.png

2. 第一次调整边界参数

  1. library(ggplot2)
  2. library(ggthemes)
  3. p <- ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour=factor(cyl))) + guides(color=F)
  4. p <- p + theme_solarized(light=FALSE) + scale_colour_solarized('blue')
  5. p <- p + theme(plot.margin=unit(rep(1,4),'lines'))
  6. ggsave("test1.png", units="in", dpi=300, width=4, height=4, device="png")

test1.png

3. 第二次调整边界参数

  1. library(ggplot2)
  2. library(ggthemes)
  3. p <- ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour=factor(cyl))) + guides(color=F)
  4. p <- p + theme_solarized(light=FALSE) + scale_colour_solarized('blue')
  5. p <- p + theme(plot.margin=unit(rep(3,4),'lines'))
  6. ggsave("test2.png", units="in", dpi=300, width=4, height=4, device="png")

test3.png

比较上述 3 幅图片,可明显发现,随着边界参数值增大,绘图区与边界的距离不断增大,从而在图片上留出更多空白区域。

此外, plot.margin 是否跟 par(mar=...) 一样遵循下、左、上、右的控制顺序呢?各位可以敲下代码,稍稍一试。