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

如何将ggplot2环形图中geom_text的文本颜色改为白色?

解决ggplot2环形图文本颜色改为白色的问题

我看了你的代码,问题出在文本颜色的设置方式上——你把color="white"放在了aes()映射里,这会让ggplot把它当成一个分类变量处理,而不是直接固定文本颜色。另外如果想让外围的STREAM分类标签也变成白色,还需要调整主题里的轴文本设置。

下面是修改后的完整代码,我标注了关键调整点:

library(ggplot2) 
library(dplyr) 

# 先整理数据集
tt <- structure(list(STREAM = c("Applications", "BI", "CRE & Telecom & Scoring", "FACE & Antifraud", "IFRS9 & Provision", "Portfolio & Production", "孝械褏写芯谢谐", "袨锌械褉邪褑懈芯薪泻邪"), 
                     PLANS = c(61, 2, 2, 23, 13, 29, 12, 16), 
                     DONE = c(0.8, 0.5, 0.85, 0.65, 0.95, 0.45, 0.9, 0.3)), 
                .Names = c("STREAM", "PLANS", "DONE"), row.names = c(NA, -8L), class = c("tbl_df", "tbl", "data.frame"))

tt$n=tt$PLANS 
tt$sp=tt$DONE 
tt$perc=paste(round(tt$sp * 100, 1), "%", sep="") 
tt$max_sp=1 
tt$pos <- 0.5 * (cumsum(tt$n) + cumsum(c(0, tt$n[-length(tt$n)]))) 
pos=tt$pos 

# 颜色 palette
cbbPalette <-c("#ac7070", "#d39c3f", "#654982", "#4a6785", "#8eb021", "#f15c75", "#815b3a", "#7f7f7f")

# 创建图表
p=ggplot(data = tt) + 
  # 先画底层半透明环形,避免覆盖文本
  geom_bar(aes(x = pos, width = n, y = max_sp, fill = `STREAM`), stat = "identity",alpha = 0.6) + 
  geom_bar(aes(x = pos, width = n, y = sp, fill = `STREAM`), stat = "identity") + 
  # 关键修改1:把color移出aes,直接设置为白色,同时调整y轴位置让文本居中
  geom_text(aes(x = pos, y = sp/2, label = perc), color="white", size = 7) + 
  scale_x_continuous(labels = tt$`STREAM`, breaks = pos)+ 
  scale_fill_manual(values=cbbPalette)+ 
  ylim(-1,1)+ 
  theme_minimal() + 
  theme(
    # 关键修改2:显示外围分类标签并设为白色,隐藏y轴文本
    axis.text.x = element_text(color="white", size=10),
    axis.text.y = element_blank(),
    axis.title = element_blank(), 
    panel.grid = element_blank(), 
    legend.position="none"
  )+
  coord_polar(start = 0) 
p

核心调整说明:

  • 环形内百分比文本:将color="white"从aes()中移出,直接作为geom_text的参数,这样就能强制文本变成白色;同时把y轴位置设为sp/2,让文本精准居中在进度条里,比用position_stack更直观。
  • 外围分类标签:原来的代码用axis.text = element_blank()隐藏了所有轴文本,现在单独设置axis.text.x为白色并显示,同时保留axis.text.y = element_blank()隐藏无用的y轴文本。
  • 调整了geom_bar的绘制顺序,先画底层半透明环形,再画进度条,避免进度条遮挡文本。

这样修改后,环形图里的所有文本(百分比和外围分类标签)都会变成白色,符合你的需求。

内容的提问来源于stack exchange,提问作者Batanichek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:07:31