2011-07-18 43 views
68

默认情况下,ggplot2生成灰色背景的图。如何更改剧情背景的颜色?如何更改用ggplot2制作的图的背景色

例如,通过下面的代码所产生的曲线图:

library(ggplot2) 
myplot<-ggplot(data=data.frame(a=c(1,2,3), b=c(2,3,4)), aes(x=a, y=b)) + geom_line() 
myplot 

回答

86

要更改面板的背景颜色,使用以下代码:

myplot + theme(panel.background = element_rect(fill = 'green', colour = 'red')) 

要改变绘图的颜色(但不是面板的颜色),你可以这样做:

myplot + theme(plot.background = element_rect(fill = 'green', colour = 'red')) 

查看更多主题的详细信息Quick reference sheet for legends, axes and themes

+39

还有'theme_bw',给你一个白色的背景和灰色的网格线。我一直都在使用它,因为在打印中它看起来比默认的灰色背景好得多:'myplot + theme_bw()' – ROLO

+0

@ROLO:太棒了!有没有办法将这个默认应用到所有的情节? – krlmlr

+9

把这个放在默认的B&W ggplots脚本的开头: 'ggplot < - function(...){ \t ggplot2 :: ggplot(...)+ theme_bw() }' – ROLO

44

为了避免过时optstheme_rect使用:

myplot + theme(panel.background = element_rect(fill='green', colour='red')) 

要定义自己的自定义主题的基础上,theme_gray但你的一些变化和一些额外设施,包括网格线颜色/尺寸的控制(更多选择可与at ggplot2.org玩):

theme_jack <- function (base_size = 12, base_family = "") { 
    theme_gray(base_size = base_size, base_family = base_family) %+replace% 
     theme(
      axis.text = element_text(colour = "white"), 
      axis.title.x = element_text(colour = "pink", size=rel(3)), 
      axis.title.y = element_text(colour = "blue", angle=45), 
      panel.background = element_rect(fill="green"), 
      panel.grid.minor.y = element_line(size=3), 
      panel.grid.major = element_line(colour = "orange"), 
      plot.background = element_rect(fill="red") 
    ) 
} 

为了使您的自定义主题时ggplot被称为未来默认的,没有掩蔽:

theme_set(theme_jack()) 

如果你想改变当前设置的主题元素:

theme_update(plot.background = element_rect(fill="pink"), axis.title.x = element_text(colour = "red")) 

要保存当前的默认主题作为一个对象:

theme_pink <- theme_get() 

注意theme_pink是一个列表,而theme_jack是一个函数。因此,要将主题返回到theme_jack,请使用theme_set(theme_jack()),而要返回到theme_pink,请使用theme_set(theme_pink)

如果您愿意,您可以用theme_jack的定义中的theme_bw代替theme_gray。为了您的自定义主题,以类似于theme_bw但所有网格线(X,Y,主要和次要)关闭:

theme_nogrid <- function (base_size = 12, base_family = "") { 
    theme_bw(base_size = base_size, base_family = base_family) %+replace% 
     theme(
      panel.grid = element_blank() 
    ) 
} 

最后绘制choropleths或ggplot其他地图时,根据讨论here更激进的主题有用的,但更新以避免折旧。此处的目的是消除灰色背景以及可能会从地图分散注意力的任何其他功能。

theme_map <- function (base_size = 12, base_family = "") { 
    theme_gray(base_size = base_size, base_family = base_family) %+replace% 
     theme(
      axis.line=element_blank(), 
      axis.text.x=element_blank(), 
      axis.text.y=element_blank(), 
      axis.ticks=element_blank(), 
      axis.ticks.length=unit(0.3, "lines"), 
      axis.ticks.margin=unit(0.5, "lines"), 
      axis.title.x=element_blank(), 
      axis.title.y=element_blank(), 
      legend.background=element_rect(fill="white", colour=NA), 
      legend.key=element_rect(colour="white"), 
      legend.key.size=unit(1.2, "lines"), 
      legend.position="right", 
      legend.text=element_text(size=rel(0.8)), 
      legend.title=element_text(size=rel(0.8), face="bold", hjust=0), 
      panel.background=element_blank(), 
      panel.border=element_blank(), 
      panel.grid.major=element_blank(), 
      panel.grid.minor=element_blank(), 
      panel.margin=unit(0, "lines"), 
      plot.background=element_blank(), 
      plot.margin=unit(c(1, 1, 0.5, 0.5), "lines"), 
      plot.title=element_text(size=rel(1.2)), 
      strip.background=element_rect(fill="grey90", colour="grey50"), 
      strip.text.x=element_text(size=rel(0.8)), 
      strip.text.y=element_text(size=rel(0.8), angle=-90) 
     ) 
} 
+1

这是非常有用的,谢谢。仅供参考,我发现参数'plot.background'必须传递给'theme'。其他参数是可选的。 –