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

ggplot中geom_text按position_group着色报错“Unknown colour name: QB”求助

ggplot2 颜色映射报错解决方案

问题场景

运行以下R代码绘制可视化时出现报错:

ggplot(data = plot_2022points_ALL, aes(ScoringSystem, Rank)) +
  ggbump::geom_bump(linewidth = 1.5,
                    mapping = aes(group=player_display_name, 
                                  color= I(team_color))) +
  geom_point(aes(group=player_display_name, color=I(team_color2)),
             size=4) +
  geom_text(data = plot_2022points_ALL %>% filter(ScoringSystem == "ENOsysrank"),
            aes(label=player_display_name,
                color=position_group),
            size = 4,
            fontface = "bold",
            nudge_x = -0.2,
            hjust = 1)

错误信息

Error in `geom_text()`:
! Problem while converting geom to grob.
ℹ Error occurred in the 3rd layer.
Caused by error:
! Unknown colour name: QB

需求与尝试

需求:

  • geom_bump和geom_point按team_color/team_color2的十六进制值着色
  • geom_text按position_group字段(如QB、TE)着色

已尝试将color映射移至ggplot()全局aes中,问题未解决;已将颜色变量放入aes()内,怀疑是否与其他图层使用I()函数有关。

数据示例

position_groupplayer_display_nameteampointsScoringSystemRankteam_color
QBPatrick MahomesKC485.4ENOsysrank1#E31837
TEJustin JeffersonMIN378.7PPR6#4F2683

问题原因

报错核心是:geom_text中aes(color=position_group)的QB/TE是自定义类别,ggplot默认会把它们当作内置颜色名解析,但这些值不在ggplot的内置颜色列表里,因此报错。其他图层的I()函数是直接传入颜色值(跳过映射系统),和这个报错无关。

解决方法

需要为position_group的每个类别手动指定对应颜色,用scale_color_manual()完成映射:

修改后的完整代码:

library(ggplot2)
library(ggbump)
library(dplyr)

ggplot(data = plot_2022points_ALL, aes(ScoringSystem, Rank)) +
  ggbump::geom_bump(linewidth = 1.5,
                    mapping = aes(group=player_display_name, 
                                  color= I(team_color))) +
  geom_point(aes(group=player_display_name, color=I(team_color2)),
             size=4) +
  geom_text(data = plot_2022points_ALL %>% filter(ScoringSystem == "ENOsysrank"),
            aes(label=player_display_name,
                color=position_group),
            size = 4,
            fontface = "bold",
            nudge_x = -0.2,
            hjust = 1) +
  # 根据你的position_group类别,手动分配对应颜色,按需调整
  scale_color_manual(values = c(
    QB = "#E31837",
    TE = "#4F2683",
    RB = "#008E97",
    WR = "#A71930"
  ))

补充说明

  • 使用I()的图层不会被scale_color_manual()影响,因为I()是直接传入颜色值,不参与ggplot的颜色映射逻辑
  • 如果不想手动指定所有颜色,也可以用scale_color_discrete()让ggplot自动分配离散颜色,或者用scale_color_viridis_d()这类预设的离散配色方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:04:58