如何更改使用 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 <- function(...) ggplot2::ggplot(...) + theme_bw()
@ROLO 值得自己回答,尤其是因为 Jack 的回答不会改变网格线的颜色。
请注意,opts
和 theme_rect
在 ggplot2 的较新版本中已弃用。 (0.9.3)。所以第二个命令的新版本将变为:myplot + theme(plot.background = element_rect(fill='green', colour='red'))
【参考方案2】:
为避免被弃用的 opts
和 theme_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 制作的绘图的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章