【问题标题】:Conditionally change panel background with facet_grid?使用 facet_grid 有条件地更改面板背景?
【发布时间】:2012-03-23 23:02:55
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

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

    1. 创建一个数据框,对您要绘制的信息进行编码
    2. 将该数据框传递给几何对象

    在这种情况下,由于您要更改的情节的特定方面,这会变得更加复杂。设计的权力 ggplot2 以将绘图的数据元素(即geom's)与非数据元素(即主题)分开的方式,并且恰好情节背景属于“非-数据”类别。

    总是有修改底层网格对象manually的选项,但这很乏味,细节可能会随着ggplot2的不同版本而改变。相反,我们将使用 Hadley 在this 问题中提到的“hack”。

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

    【讨论】:

    • 非常感谢您的帮助。绝对有用。
    • 请注意,在 geom_raster 后面设置 panel.background 和上面的 geom_rect 行为不同,因为当光栅后面没有“任何东西”时可以进行优化。当另存为 pdf 时,geom_rect 版本是一个大得多的文件,几乎无法用大多数 pdf 查看器打开!
    • 是否可以通过连续的特征和规模做到这一点?
    • @UnivStudent 你能说得更具体点吗?
    • @joran 不用像星期几这样的因子变量,你能根据数字特征给它上色吗?
    【解决方案2】:

    我还不能评论..所以这里是对他的回答的附加回答。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      相关资源
      最近更新 更多