You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于分类变量调整geom_scatterpie饼图半径?

解决scatterpie按分类变量调整饼图大小及分组区分的问题

一、按分类变量调整饼图半径

geom_scatterpie的r参数要求传入数值型数据,直接使用分类因子会因类型不匹配导致图表空白。你可以通过以下方式将分类变量映射为对应数值半径:

  1. 提前在数据框中生成半径列
# 给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)
  1. 直接在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 02:00:21