如何为组合框图中的每个面板设置背景色? [英] How to set background color for each panel in grouped boxplot?

查看:13
本文介绍了如何为组合框图中的每个面板设置背景色?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我绘制了一个分组的框图,并尝试更改每个面板的背景颜色。我可以使用panel.back函数更改整个绘图背景。但如何才能为个别小组做到这一点呢?我发现了一个类似的问题here。但我未能将代码应用到我的情节中。

我的输入数据的前几行如下所示

代码

p<-ggplot(df, aes(x=Genotype, y=Length, fill=Treatment)) +  scale_fill_manual(values=c("#69b3a2", "#CF7737"))+
geom_boxplot(width=2.5)+ theme(text = element_text(size=20),panel.spacing.x=unit(0.4, "lines"),
                             axis.title.x=element_blank(),axis.text.x=element_blank(),axis.ticks.x=element_blank(),axis.text.y = element_text(angle=90, hjust=1,colour="black")) +
labs(x = "Genotype", y = "Petal length (cm)")+
facet_grid(~divide,scales = "free", space = "free")
p+theme(panel.background = element_rect(fill = "#F6F8F9", colour = "#E7ECF1"))

推荐答案

不幸的是,像其他theme元素一样,element_rect()fill美学无法映射到数据。您也不能仅将颜色矢量发送到fill(创建您自己的排序映射)。最后,最简单的解决方案可能非常类似于the answer you linked to in your question...这里有一点小问题。

我将使用mtcars作为示例。请注意,我正在将数据集中的一些连续变量转换为因子,以便我们可以创建一些更离散的值。

需要注意的是,矩形几何图形绘制在箱图几何图形之前,以确保箱图显示在矩形的顶部。

ggplot(mtcars, aes(factor(carb), disp)) +
  geom_rect(
    aes(fill=factor(carb)), alpha=0.5,
    xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf) +
  geom_boxplot() +
  facet_grid(~factor(carb), scales='free_x') +
  theme_bw()

全部完成...但也不完全是。有些地方不对劲,如果您注意图例上的框和绘图面板中的网格线,您可能会注意到这一点。看起来Alpha值对于某些方面是不正确的,而对于其他方面是正确的。这是怎么回事?

嗯,这与geom_rect的工作方式有关。它在每个绘图面板上绘制一个方框,但就像其他几何图形一样,它被映射到数据。尽管geom_rectxy美学实际上并不用于绘制矩形,但它们用于指示每个矩形绘制了多少。这意味着在每个面中绘制的矩形的数量对应于该面存在的数据集中的线数。如果存在3个观测值,则绘制3个矩形。如果一个面存在20个观测值,则绘制20个矩形,依此类推。

因此,解决方法是为每个方面提供一个数据帧,每个数据帧包含一个观察。然后,我们必须确保提供ggplot调用中包含的任何和所有其他美学(xy),否则我们将收到一个错误,指示ggplot无法找到该特定列。请记住,即使geom_rect不使用它们进行绘制,它们也用于确定存在多少观测值(从而确定要绘制多少观测值)。

rect_df <- data.frame(carb=unique(mtcars$carb))  # supply one of each type of carb

# have to give something to disp
rect_df$disp <- 0

ggplot(mtcars, aes(factor(carb), disp)) +
  geom_rect(
    data=rect_df,
    aes(fill=factor(carb)), alpha=0.5,
    xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf) +
  geom_boxplot() +
  facet_grid(~factor(carb), scales='free_x') +
  theme_bw()

这样好多了。

这篇关于如何为组合框图中的每个面板设置背景色?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆