我正在使用 ggplot2 中的“提示”数据集。如果我做
sp = ggplot(tips,aes(x=total_bill, y = tip/total_bill)) +
geom_point(shape=1) +
facet_grid(sex ~ day)
情节很好。但我现在想要改变“Fri”下的情节的面板背景。有没有办法做到这一点?
更好的是,我可以通过传递参数来有条件地改变颜色吗?例如,如果超过3个点低于0.1,那么将面板背景(仅适用于该面板)更改为某种颜色,而其他所有颜色保持默认浅灰色?
答案 0 :(得分:59)
在 ggplot2 中执行任何操作的一般规则是,
在这种情况下,由于要更改的绘图的特定方面,这会变得有点复杂。设计 ggplot2 的方式将图的数据元素(即geom)与非数据元素(即主题)分开,并且情节背景属于“非” -data“category。
总是可以选择修改基础网格对象manually,但这很乏味,细节可能会随着 ggplot2 的不同版本而改变。相反,我们将使用哈德利在this问题中提到的“黑客”。
#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)
答案 1 :(得分:2)
我还不能发表评论..所以这里是对他回答的另一个答案。
如果您在使用透明度设置时遇到问题,例如设置alpha = 0.2但没有注意到任何差异,可能是因为您提供给ggplot的数据。
“谢谢你澄清你的问题。这让我感到困惑,所以我去谷歌,最后学习了一些新的东西(在他们的例子中解决了一些变幻莫测的事情之后)。显然你正在做的是在顶部绘制许多矩形彼此之间,有效地消除了你想要的半透明度。因此,解决这个问题的唯一方法是在单独的df中硬编码矩形坐标“
这个答案来自 geom_rect and alpha - does this work with hard coded values?