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

如何在R的ggplot中仅选取总计数Top N组进行绘图

问题分析与解决方案

原代码报错的核心原因:你用count(Tencode.Description)只统计了每个Tencode组的总计数,这一步直接把Year列从数据中丢弃了,后续ggplot调用Year作为x轴自然会找不到该变量。

要实现“展示总计数前N的Tencode组+按年度计数展示”的需求,需要先保留年度维度的计数,再基于总计数筛选分组,具体修正代码如下:

library(tidyverse)
library(scales)

# 1. 先按Tencode和Year分组统计年度计数,同时计算每个Tencode的总计数
top_ten_tencode <- complete_df %>%
  na.omit() %>%  # 先处理缺失值,避免后续统计出错
  count(Tencode.Description, Year, name = "year_count") %>%  # 按组+年度计数
  group_by(Tencode.Description) %>%
  mutate(total_count = sum(year_count)) %>%  # 计算每个Tencode的总计数
  ungroup() %>%
  # 2. 筛选总计数排名前10的Tencode组
  filter(Tencode.Description %in% (
    . %>% arrange(desc(total_count)) %>% pull(Tencode.Description) %>% head(10)
  )) %>%
  # 3. 按总计数降序重新排序Tencode因子,保证绘图时顺序正确
  mutate(Tencode.Description = fct_reorder(Tencode.Description, -total_count))

# 4. 绘制分组柱状图
ggplot(top_ten_tencode, aes(x = Year, y = year_count, fill = Tencode.Description)) +
  geom_bar(stat = "identity", position = position_dodge()) +  # 用已统计好的year_count,指定stat=identity
  scale_y_log10(labels = comma) +
  labs(fill = "Tencode", x = "Year", y = "Count") +
  theme(
    axis.title.x = element_text(color="black", size=15, face="bold"),
    axis.title.y = element_text(color="black", size=15, face="bold"),
    legend.title = element_text(colour = "black", size = 10, face = "bold"),
    legend.text = element_text(colour = "black", size = 10, face = "plain"),
    axis.text.x = element_text(colour = "black", size = 10, face = "plain"),
    axis.text.y = element_text(colour = "black", size = 10, face = "plain")
  )

关键修正点说明:

  • 先通过count(Tencode.Description, Year)保留年度维度的计数,避免丢失Year信息
  • 新增total_count列计算每个Tencode的总计数,以此为依据筛选前10组
  • 用fct_reorder(Tencode.Description, -total_count)让Tencode按总计数降序排列,符合“影响力最大在前”的需求
  • 绘制柱状图时指定stat = "identity",因为我们已经提前统计好了计数,不需要ggplot再自动统计

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:03:29