如何更改使用 ggplot2 制作的绘图的背景颜色

Posted

技术标签:

【中文标题】如何更改使用 ggplot2 制作的绘图的背景颜色【英文标题】:How do I change the background color of a plot made with ggplot2 【发布时间】:2011-10-07 20:38:56 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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。

【讨论】:

还有theme_bw,为您提供白色背景和灰色网格线。我一直在使用它,因为在打印中它看起来比默认的灰色背景要好得多:myplot + theme_bw() @ROLO:太好了!有没有办法默认将此应用于所有地块? 把这个放在你的脚本的开头,用于默认的黑白 ggplots:ggplot &lt;- function(...) ggplot2::ggplot(...) + theme_bw() @ROLO 值得自己回答,尤其是因为 Jack 的回答不会改变网格线的颜色。 请注意,optstheme_rect 在 ggplot2 的较新版本中已弃用。 (0.9.3)。所以第二个命令的新版本将变为:myplot + theme(plot.background = element_rect(fill='green', colour='red'))【参考方案2】:

为避免被弃用的 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_gray 替换为theme_bw。让您的自定义主题类似于 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) 
        )   

【讨论】:

这很有帮助,谢谢。仅供参考,我发现参数plot.background 必须传递给theme。其他参数是可选的。【参考方案3】:

这是一个自定义主题,可将 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()

【讨论】:

以上是关于如何更改使用 ggplot2 制作的绘图的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

Python Pyx 绘图:如何更改绘图的颜色背景?

更改绘图的背景颜色

无法更改ggplot中线条的颜色

更改 ggplot2 中条形图和图例的默认颜色

如何更改 JColorChooser 的 Swatches 组件的颜色?

UIView 子类不能从黑色背景更改