有条不紊地使用facet_grid更改面板背景?

时间:2012-03-23 23:02:55

标签: r ggplot2

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

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

情节很好。但我现在想要改变“Fri”下的情节的面板背景。有没有办法做到这一点?

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

2 个答案:

答案 0 :(得分:59)

ggplot2 中执行任何操作的一般规则是,

  1. 创建一个数据框,对您要绘制的信息进行编码
  2. 将该数据框传递给geom
  3. 在这种情况下,由于要更改的绘图的特定方面,这会变得有点复杂。设计 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) 
    

    enter image description here

    #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) 
    

    enter image description here

答案 1 :(得分:2)

我还不能发表评论..所以这里是对他回答的另一个答案。

如果您在使用透明度设置时遇到问题,例如设置alpha = 0.2但没有注意到任何差异,可能是因为您提供给ggplot的数据。

“谢谢你澄清你的问题。这让我感到困惑,所以我去谷歌,最后学习了一些新的东西(在他们的例子中解决了一些变幻莫测的事情之后)。显然你正在做的是在顶部绘制许多矩形彼此之间,有效地消除了你想要的半透明度。因此,解决这个问题的唯一方法是在单独的df中硬编码矩形坐标“

这个答案来自 geom_rect and alpha - does this work with hard coded values?