为了账号安全,请及时绑定邮箱和手机立即绑定

使用facet_grid有条件地更改面板背景吗?

/ 猿问

使用facet_grid有条件地更改面板背景吗?

至尊宝的传说 2019-11-13 15:53:20

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


sp = ggplot(tips,aes(x=total_bill, y = tip/total_bill)) + 

        geom_point(shape=1) + 

        facet_grid(sex ~ day)

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


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


查看完整描述

3 回答

?
慕神8447489

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


创建一个数据框,对要绘制的信息进行编码

将该数据框传递给geom

在这种情况下,由于要更改的绘图的特定方面,这使操作变得有些复杂。ggplot2设计的能力以一种将图的数据元素(即geom的)与非数据元素(即主题的)分开的方式发生,因此图背景属于“ non-data”类别。


始终可以选择手动修改基础网格对象,但这很繁琐,并且细节可能因ggplot2的不同版本而异。相反,我们将使用Hadley在此问题中提到的“ 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) 


查看完整回答
反对 回复 2019-11-13
?
慕瓜9086354

我还不能发表评论..因此,这是乔兰回答问题的另一个答案。


如果您在透明度设置方面遇到麻烦,例如将alpha设置为0.2却没有注意到任何差异,则可能是由于您将数据提供给ggplot所致。


“感谢您澄清您的问题。这让我感到困惑,所以我去了google,并最终学习了一些新知识(在解决了示例中的一些变化之后)。显然,您正在做的是在彼此之上绘制多个矩形,有效地消除了您想要的半透明性。因此,解决此问题的唯一方法是将矩形坐标硬编码到单独的df中”



查看完整回答
反对 回复 2019-11-13
?
慕仰8121524

请注意,设置panel.background和上面的geom_rect在geom_raster后面时,行为会有所不同,因为当栅格后面没有任何内容时,可以进行优化。当另存为pdf时,geom_rect版本是一个很大的文件,对于大多数pdf查看器来说实际上是无法打开的!

查看完整回答
反对 回复 2019-11-13
  • 3 回答
  • 0 关注
  • 50 浏览
我要回答

相关问题推荐

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信