ggplot中geom_dotplot的fill参数无法匹配scale_fill_manual着色如何解决
ggplot2 geom_dotplot 自定义填充色不生效解决方案
核心问题原因
- 原代码中
geom_dotplot默认未开启按fill变量分组堆叠的配置,仅按group=year做整体堆叠,不会根据medal字段区分渲染填充色 - 手动指定的
group=year优先级高于fill映射,覆盖了按奖牌类型的分组逻辑
修正后代码
library(ggplot2) library(dplyr) library(tidyr) olympics <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-07-27/olympics.csv') olympics <- olympics %>% mutate(medal = as.factor(medal), year = as.factor(year)) judo <- olympics %>% filter(sport == 'Judo', team == 'Japan') %>% drop_na() %>% select(name, sex, age, team, year, medal) %>% arrange(year) ggplot(data = judo) + geom_dotplot( aes(x = year, fill = medal), binwidth = .25, stackgroups = TRUE, binpositions = "all", color = NA # 可选:取消点的黑色边框,让填充色更清晰 ) + scale_fill_manual( values = c('#b08d57','#FFD700','#C0C0C0'), name = "奖牌类型", labels = c("铜牌", "金牌", "银牌") )
关键修改说明
- 移除
aes中冗余的group = year参数:x轴为离散的年份变量时,ggplot默认按x轴分组,手动指定group会屏蔽fill的分组逻辑 - 新增
stackgroups = TRUE参数:开启按fill映射的奖牌类型分组堆叠,不同类型的奖牌点才会渲染对应的自定义填充色 - 新增
binpositions = "all"参数:统一所有分组的分箱位置,避免不同奖牌的点出现错位堆叠的问题 - 可选添加
color = NA参数:去除点默认的黑色边框,让填充色显示更准确清晰 - 确认
scale_fill_manual的色值顺序与medal因子的默认水平(Bronze、Gold、Silver)对应,避免颜色映射错位
内容的提问来源于stack exchange,提问作者user4381526
相关产品推荐
相关产品推荐

