r - 通过因子变量的模式或其他方式填充geom_tile以在R中创建热图
问题描述
我正在尝试使用三个因素在 R 中创建热图。我希望能够使用其中一个因素的模态类别来填充颜色,但我无法找到如何做到这一点。
当我尝试使用 geom_tile 的 ggplot 时,它确实会生成热图,但是,我不确定它如何选择填充变量的值。这当然不是模式,因为我已经检查过了。
例如,使用内置数据集 ChickWeight,我希望填充基于我创建的变量“weight_group”的模态(最常见)类别。
data(ChickWeight)
glimpse(ChickWeight)
ChickWeight$Time <- ifelse(ChickWeight$Time >= 10,1,0)
ChickWeight <- ChickWeight %>% mutate(weight_group = ntile(weight, 3))
ChickWeight$Diet <- as.factor(ChickWeight$Diet)
ChickWeight$Time <- as.factor(ChickWeight$Time)
ChickWeight$weight_group <- as.factor(ChickWeight$weight_group)
table(ChickWeight$Diet, ChickWeight$Time, ChickWeight$weight_group)
ggplot(data = ChickWeight, aes(x=Time, y=Diet, fill=weight_group)) +
geom_tile()
根据三通表,当Diet==1 & Time==1为weight_group==1时,右下块应该是粉红色(对应weight_group==1)而不是绿色作为weight_group的模态类别(11个计数) )。
对此的任何帮助将不胜感激。
谢谢!
解决方案
您可以定义一个函数 getMode,该函数使用 plyr 的 count 函数计算向量的模式,以创建每个类的计数数据框。然后对数据框进行排序,得到最高值。
library(plyr)
getMode <- function(vec){
df <- plyr::count(vec) %>%
arrange(-freq)
return(df[1,"x"])
}
从这里按时间和饮食分组,因此您可以找到这些组的每个组合的模式,然后将其用作 ggplot 的填充。
ChickWeight %>%
group_by(Time, Diet) %>%
summarize(modeWeightGroup = getMode(weight_group)) %>%
ggplot(aes(x=Time, y=Diet, fill= modeWeightGroup)) +
geom_tile()
我也不认为右下角的正方形应该是 weight_group 1,因为看起来三向表已经根据 weight_group 排序,所以正方形表示 weight_group 1 中的小鸡,它们的模态时间,饮食组合是(1 ,1)。
推荐阅读
- python - Printing a 2d list with variable column lengths
- r - R不正确的显示形状文件
- python - 尝试读取 m4b 文件时诱变剂引发错误
- ios - 删除 Iphone Safari 上的 textarea 内阴影
- c# - 在 C# 中显示来自 JSON 的所有名称列表
- uiview - 自定义 UIView 的大小不正确(框架、边界)
- amazon-web-services - 尝试在本地访问 DynamoDB 时超时
- android - 如何在 Android 中使用 Mokito 覆盖/自定义函数的行为
- android - 为什么模块没有显示在应用程序模块依赖项中
- java - 关于 3-Sum 算法,数组访问次数如何计算(1/2 N^3),增长顺序如何计算(N^3)?