R中的geom_tile ggplot2使用了什么样的统计方法?

5

我使用了 geom_tile() 来绘制三个变量在同一张图上... 通过

tile_ruined_coop<-ggplot(data=df.1[sel1,])+
  geom_tile(aes(x=bonus, y=malus, fill=rf/300))+
  scale_fill_gradient(name="vr")+
  facet_grid(Seuil_out_coop_i ~ nb_coop_init)
tile_ruined_coop

我很高兴看到这个结果!

ggplot2 geom_tile exemple

但是,fill 是应用了什么样的统计处理方法?这是一个平均值吗?

3个回答

3
它使用文档中所示的 stat_identity。您可以轻松测试:
DF <- data.frame(x=c(rep(1:2, 2), 1), 
                 y=c(rep(1:2, each=2), 1), 
                 fill=1:5)

#  x y fill
#1 1 1    1
#2 2 1    2
#3 1 2    3
#4 2 2    4
#5 1 1    5

p <- ggplot(data=DF) +
  geom_tile(aes(x=x, y=y, fill=fill))

print(p)

enter image description here

如您所见,1/1组合的填充值为5。如果使用因子,会更加清晰地了解发生的情况:

p <- ggplot(data=DF) +
  geom_tile(aes(x=x, y=y, fill=factor(fill)))

print(p)

enter image description here

如果您想描绘手段,我建议在ggplot2之外计算它们:

library(plyr)
DF1 <- ddply(DF, .(x, y), summarize, fill=mean(fill))
p <- ggplot(data=DF1) +
  geom_tile(aes(x=x, y=y, fill=fill))

print(p)

enter image description here

这比试图找出stat_summary是否能够以某种方式与geom_tile协同工作要容易得多(我表示怀疑)。


谢谢!那么,如果我想使用ddply来找到按bonus和malus分组的fill值的平均值...但是我想保留所有其他变量,我该怎么做? - delaye
使用aggregate()函数,我找到了一个解决方案!如果能在ggplot2中实现这种统计解决方案就太棒了。 - delaye

3

在绘制填充值的平均值之前,您应该先对值进行聚合。scale_colour_gradient(...)不是在数据层级上工作,而是在可视化层级上工作。让我们从一个玩具数据框开始构建一个可重复使用的示例。

mydata = expand.grid(bonus = seq(0, 1, 0.25), malus = seq(0, 1, 0.25), type = c("Risquophile","Moyen","Risquophobe"))
mydata = do.call("rbind",replicate(40, mydata, simplify = FALSE))
mydata$value= runif(nrow(mydata), min=0, max=50)
mydata$coop = "cooperative"

现在,在绘图之前,我建议您计算每组40个值的平均值,并且为此操作我喜欢使用dplyr包:

library(dplyr)
data = mydata %>% group_by("bonus","malus","type","coop") %>% summarise(vr=mean(value))

现在你已经准备好使用ggplot2绘制数据集了:
library(ggplot2)
g = ggplot(data, aes(x=bonus,y=malus,fill=vr))
g = g + geom_tile()
g = g + facet_grid(type~coop)

这是结果: 瓷砖图

你可以确保填充值正好是你的值的平均值。
这是否符合你的预期?


是的,谢谢Fabio!如果ggplot能够使用基本统计填充,那将非常棒! :-) - delaye
我认为这两件事是有意分离的。ggplot就像可视化语法,而aggregate或dplyr则用于“数据塑形”。 - Fabio

-1

scale_fill()和geom_tile()不应用任何统计方法,或者更好的说,应该将stat_identity()应用于你的填充值=rf/300。它只是计算你使用了多少种颜色,然后使用munsell函数'mnsl()'生成这些颜色。如果你想仅对显示的颜色应用一些统计方法,你应该使用:

scale_colour_gradient(trans = "log")

或者

scale_colour_gradient(trans = "sqrt")

改变瓷砖之间的颜色可能不是最好的想法,因为地块必须是可比较的,并且您通过它们的颜色来比较价值。希望这可以帮到您。

谢谢Fabio。但是,如果我想要绘制填充值的平均值,我应该怎么做呢?似乎不存在“trans = mean”这个选项 :-S。 - delaye
你想要“风险爱好者”,“中等”和“风险厌恶者”之间的总体平均值吗? - Fabio
我有40个模拟变量池,因此我想计算每个变量配置的平均结果。例如,奖金=0,罚款=0,风险爱好者...和奖金=0,罚款=2,风险爱好者...等等。 - delaye

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接