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

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
})

说明

  1. scale_fill_manual和scale_color_manual使用完全一致的参数,确保填充色块、文本标签、图例三者的颜色映射完全对应
  2. 自定义配色clrs直接绑定到两个规则中,彻底替代默认配色体系,避免映射混乱
  3. geom_text的color=Outcome会自动读取scale_color_manual的规则,让标签颜色精准匹配对应类别的图例颜色

内容的提问来源于stack exchange,提问作者M.O

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:17:03