有条件地更改面板背景与facet_grid?

我正在使用ggplot2中的“提示”数据集。 如果我做

sp = ggplot(tips,aes(x=total_bill, y = tip/total_bill)) + geom_point(shape=1) + facet_grid(sex ~ day) 

情节出来很好。 但是我现在想要在“星期五”下改变面板背景。 有没有办法做到这一点?

更好的是,我可以通过传递参数有条件地改变颜色吗? 例如,如果超过3点低于0.1,那么将面板背景(仅适用于该面板)更改为某种颜色,而其他所有其他颜色保持为默认浅灰色?

ggplot2中做任何事情的一般规则是,

  1. 创build一个数据框,对您想要绘制的信息进行编码
  2. 将该数据框传递给一个geom

在这种情况下,这会变得更复杂一点,因为你想改变的情节的特定方面。 被devise为ggplot2的权力以一种将图(即几何graphics)的数据元素与非数据元素(即主题图像)分开的方式,并且情节背景属于“非数据”类别。

总是有手动修改底层网格对象的选项,但是这很枯燥,细节可能会随着ggplot2的不同版本而改变 。 相反,我们将采用哈德利在这个问题中提到的“黑客”。

 #Create a data frame with the faceting variables # and some dummy data (that will be overwritten) tp <- unique(tips[,c('sex','day')]) tp$total_bill <- tp$tip <- 1 #Just Fri ggplot(tips,aes(x=total_bill, y = tip/total_bill)) + geom_rect(data = subset(tp,day == 'Fri'),aes(fill = day),xmin = -Inf,xmax = Inf, ymin = -Inf,ymax = Inf,alpha = 0.3) + geom_point(shape=1) + facet_grid(sex ~ day) 

在这里输入图像描述

 #Each panel ggplot(tips,aes(x=total_bill, y = tip/total_bill)) + geom_rect(data = tp,aes(fill = day),xmin = -Inf,xmax = Inf, ymin = -Inf,ymax = Inf,alpha = 0.3) + geom_point(shape=1) + facet_grid(sex ~ day) 

在这里输入图像描述

我还不能评论..所以这是一个额外的答案乔兰他的回答。

如果你在透明度设置上遇到麻烦,比如设置alpha = 0.2,但是没有注意到任何差异,可能是因为你给ggplot的数据。

“谢谢你澄清你的问题,这让我感到困惑,所以我去了谷歌,最后学习了一些新的东西(在他们的例子中解决了一些变幻莫测的问题之后),显然你在做的是把很多矩形互相叠加,有效地消除你想要的半透明度,所以唯一的方法就是把矩形坐标硬编码到一个单独的df“

这个答案来自geom_rect和alpha – 这是否与硬编码值工作?