如何基于分类变量调整geom_scatterpie饼图半径?
解决scatterpie按分类变量调整饼图大小及分组区分的问题
一、按分类变量调整饼图半径
geom_scatterpie的r参数要求传入数值型数据,直接使用分类因子会因类型不匹配导致图表空白。你可以通过以下方式将分类变量映射为对应数值半径:
- 提前在数据框中生成半径列
# 给treatment组设置更大的半径,control组用默认值 dat$radius <- ifelse(dat$site_type == "treatment", 0.01, 0.007) # 绘图时调用该列 my_map + geom_scatterpie(data = dat, aes(x=lon, y=lat, r = radius), color = "black", cols = names(dat)[5:8], legend_name = "Species") + coord_equal(ratio = 1.5)
- 直接在aes中动态转换
无需修改数据框,直接在映射中完成分类到数值的转换:
my_map + geom_scatterpie(data = dat, aes(x=lon, y=lat, r = ifelse(site_type == "treatment", 0.01, 0.007)), color = "black", cols = names(dat)[5:8], legend_name = "Species") + coord_equal(ratio = 1.5)
二、其他分组区分方法
除了调整半径,还可以通过以下方式强化分组差异:
- 不同边框颜色区分:给不同组设置专属边框色,配合图例更直观
my_map + geom_scatterpie(data = dat, aes(x=lon, y=lat, r = ifelse(site_type == "treatment", 0.01, 0.007), color = site_type), cols = names(dat)[5:8], legend_name = "Species") + scale_color_manual(values = c("treatment" = "#E63946", "control" = "#1D3557")) + coord_equal(ratio = 1.5)
- 添加分组标签:在饼图旁标注组类型,避免混淆
my_map + geom_scatterpie(data = dat, aes(x=lon, y=lat, r = ifelse(site_type == "treatment", 0.01, 0.007)), color = "black", cols = names(dat)[5:8], legend_name = "Species") + geom_text(data = dat, aes(x=lon, y=lat + 0.005, label = site_type), size = 3, fontface = "bold") + coord_equal(ratio = 1.5)
- 透明度区分:给不同组设置不同的填充透明度
my_map + geom_scatterpie(data = dat, aes(x=lon, y=lat, r = ifelse(site_type == "treatment", 0.01, 0.007), alpha = site_type), color = "black", cols = names(dat)[5:8], legend_name = "Species") + scale_alpha_manual(values = c("treatment" = 1, "control" = 0.7)) + coord_equal(ratio = 1.5)
内容的提问来源于stack exchange,提问作者payne
相关产品推荐
相关产品推荐

