如何更改由ggplot2制作的图的背景色


95

默认情况下,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

Answers:


120

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

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

要更改绘图的颜色(但不能更改面板的颜色),可以执行以下操作:

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

有关更多主题详细信息,请参见此处。有关图例,坐标轴和主题的快速参考表


39
还有theme_bw,为您提供白色背景和灰色网格线。我一直使用它,因为在打印中它看起来比默认的灰色背景要好得多:myplot + theme_bw()
ROLO 2011年

@ROLO:太好了!有没有一种方法可以将其默认应用于所有图?
krlmlr 2012年

11
将其放在默认B&W ggplots脚本的开始处: ggplot <- function(...) { ggplot2::ggplot(...) + theme_bw() }
ROLO 2012年

1
@ROLO应该得到自己的答案,尤其是因为Jack的答案不会改变网格线的颜色。
naught101

7
请注意,在较新版本的ggplot2中不推荐使用optstheme_rect。(0.9.3)。因此,第二条命令的更新版本将变为:myplot + theme(plot.background = element_rect(fill='green', colour='red'))
Ram Narasimhan 2012年

50

为避免弃用optstheme_rect使用:

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

要基于theme_gray定义自己的自定义主题,但要进行一些更改和一些附加功能,包括控制网格线的颜色/大小(可在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_gray为。为了使您的自定义主题相似,但关闭了所有网格线(x,y,主要和次要):theme_bwtheme_jacktheme_bw

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

最后,基于此处的讨论,是一个更激进的主题,在ggplot中绘制Choropleths或其他地图时很有用,但为避免弃用而进行了更新。这样做的目的是消除灰色背景以及可能会分散地图注意力的其他所有特征。

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。其他参数是可选的。
赛车Ta 2014年

1

这是一个自定义主题,使ggplot2背景变为白色,并且进行了许多其他更改,这些更改对于出版物和海报很有用。只需加上+ mytheme。如果您想在+ mytheme之后按+ theme添加或更改选项,它将只替换+ mytheme中的那些选项。

library(ggplot2)
library(cowplot)
theme_set(theme_cowplot())

mytheme = list(
    theme_classic()+
        theme(panel.background = element_blank(),strip.background = element_rect(colour=NA, fill=NA),panel.border = element_rect(fill = NA, color = "black"),
              legend.title = element_blank(),legend.position="bottom", strip.text = element_text(face="bold", size=9),
              axis.text=element_text(face="bold"),axis.title = element_text(face="bold"),plot.title = element_text(face = "bold", hjust = 0.5,size=13))
)

ggplot(data=data.frame(a=c(1,2,3), b=c(2,3,4)), aes(x=a, y=b)) + mytheme + geom_line()

自定义ggplot主题

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.