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

在R的ggplot中按Team列最高占比设置X轴标签

解决方法

要实现将X轴的No标签替换为对应分组内value总和最高的Team名称,核心是先计算每个No对应的最优Team,再通过命名向量精准映射标签。以下是完整步骤:

1. 计算每个No对应的Top Team

首先统计每个No下各Team的value总和,筛选出总和最高的Team,并转换为命名向量(确保No与Team一一对应):

library(tidyverse)

# 计算每个No分组中value总和最高的Team
top_team_per_no <- df_long %>%
  ungroup() %>%
  group_by(No, Team) %>%
  summarise(total_value = sum(value), .groups = "drop") %>% # 按No和Team求和
  group_by(No) %>%
  filter(total_value == max(total_value)) %>% # 筛选总和最高的Team
  slice(1) %>% # 处理平局:取第一个出现的Team
  deframe() # 转换为命名向量(名称为No,值为Team)

2. 绘制带自定义标签的柱状图

使用上述命名向量替换X轴标签,确保每个No对应正确的Team名称:

cbPalette <- c("#000000", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7")

ggplot(data = df_long, mapping = aes(x = No, y = value, fill = col)) +
  geom_bar(stat = 'identity', position = 'fill', width = 1) +
  scale_fill_manual(values = cbPalette) +
  scale_y_continuous(expand = c(0, 0)) +
  scale_x_discrete(labels = top_team_per_no) + # 使用命名向量替换标签
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5))

关键说明

  • 命名向量的优势:避免因No因子顺序与distinct()结果顺序不一致导致的标签错位,确保每个No精准匹配对应Team。
  • 平局处理:若同一No下多个Team的value总和相同,slice(1)会选取第一个出现的Team;如需自定义平局逻辑,可修改此步骤(如按字母排序选取)。
  • 若需基于单个value最大值而非总和,将summarise(total_value = sum(value))改为summarise(max_value = max(value))即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:57:02