humapr包人体热图问题:添加热图及side参数异常求助
humapr包常见问题解答
1. 基于统计数据为人体图添加热图
完全可以通过映射统计变量实现热图效果,核心是将统计数据(如计数、均值)绑定到geom_body的颜色/填充美学上,配合颜色比例尺定义热图范围。
实现步骤与示例代码
library(tidyverse) library(humapr) # 构造包含部位统计数据的数据集(以计数为例) body_stats <- tibble( loc = c("head", "neck", "chest", "abdomen", "arm", "forearm", "hand", "thigh", "leg", "foot"), count = c(12, 8, 25, 18, 30, 22, 15, 28, 20, 10) # 模拟统计值 ) # 绘制带热图的人体图 body_stats |> humap() + geom_body(aes(loc = loc, fill = count), annotate = NA) + scale_fill_gradient(low = "#f7fbff", high = "#08306b") + # 自定义热图渐变色 labs(fill = "部位出现次数")
2. 合并部位时side参数报错的解决方法
报错原因
head、neck、chest、abdomen这类部位属于无双侧区分的人体结构,humapr没有为它们提供左右双侧的图形元素。当给这些部位分配left/right的side值时,无法匹配对应图形,导致数据缺失,进而触发min/max计算的警告。
修正方案
预处理数据,给无双侧的部位统一设置side = "mid",双侧部位保留left/right值,确保数据与图形元素匹配:
library(tidyverse) library(humapr) # 构造并预处理数据:区分单侧/双侧部位的side值 body_data <- data.frame( loc = sampler(c("head", "neck", "chest", "abdomen", "arm", "forearm", "hand", "thigh", "leg", "foot"), 200), gender = sample(c("male", "female"), 200, TRUE), year = 1 ) |> mutate( side = case_when( # 双侧部位分配left/right loc %in% c("arm", "forearm", "hand", "thigh", "leg", "foot") ~ sampler(c("left", "right"), n()), # 单侧部位统一设为mid TRUE ~ "mid" ) ) # 绘制合并部位的双侧人体图 humap() + geom_body( aes(loc = loc, side = side), data = body_data, combine = list( `Upper extremities` = c("arm", "forearm","hand"), `Lower extremities` = c("thigh","leg","foot"), `Trunk` = c("abdomen","chest"), `Head & neck` = c("head","neck") ) )
这样处理后,既能保留双侧部位的左右展示,又能避免单侧部位的匹配错误,消除警告和缺失值问题。
内容的提问来源于stack exchange,提问作者Ayoubinsky
相关产品推荐
相关产品推荐

