Shiny环形图文本标签颜色与fivethirtyeight主题图例不匹配问题
解决Shiny中环形图文本标签颜色与图例不匹配的问题
问题核心在于:你仅对图形填充色做了自定义图例映射,但文本标签的颜色仍使用默认规则,导致两者配色不匹配。以下是针对性修正方案:
关键修改点
- 用你指定的自定义配色
clrs统一填充色与文本标签的颜色规则 - 同步设置填充色和文本颜色的图例映射参数(标签、顺序),确保两者完全对齐
修正后的完整代码
output$plotui3 <- renderPlot({ dng <- cutoffs() dng$fraction <- round(dng$Counts/sum(dng$Counts),2) dng$ymax <- cumsum(dng$fraction) dng$ymin <- c(0,head(dng$ymax, n=-1)) dng$labelPosition <- (dng$ymax + dng$ymin) / 2 dng$label <- ifelse(dng$Counts==0, "", paste0(dng$Outcome, ":\n ", dng$'%',"%")) # 自定义配色 clrs = c(Home = "#008FD5", Draw = "#FF2700", Away = "#77AB43") g3 <- ggplot(dng, aes(ymin=ymin, ymax=ymax, xmax=4, xmin=3, fill=Outcome)) + geom_rect()+ geom_text(x=2, aes(y=labelPosition, label=label, color=Outcome), size=6, show.legend = F)+ coord_polar(theta="y") + xlim(c(0, 4)) + theme_ipsum() + theme_void()+ # 自定义填充色与图例规则 scale_fill_manual( labels = c("Win", "Draw","Lose"), breaks = c("Home","Draw","Away"), values = clrs )+ # 同步文本颜色规则,与填充色/图例完全匹配 scale_color_manual( labels = c("Win", "Draw","Lose"), breaks = c("Home","Draw","Away"), values = clrs )+ theme(legend.position="bottom",legend.text=element_text(size=20),legend.title = element_text(size=20)) g3 })
说明
scale_fill_manual和scale_color_manual使用完全一致的参数,确保填充色块、文本标签、图例三者的颜色映射完全对应- 自定义配色
clrs直接绑定到两个规则中,彻底替代默认配色体系,避免映射混乱 geom_text的color=Outcome会自动读取scale_color_manual的规则,让标签颜色精准匹配对应类别的图例颜色
内容的提问来源于stack exchange,提问作者M.O
相关产品推荐
相关产品推荐

