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

R语言ggplot柱状图:合并Otros标签与调整排序需求

解决ggplot柱状图的两个问题

问题1:合并"Otros"类别并显示总和标签

原数据中"Otros"对应多行,导致柱状条上出现多个标签,需先对数据分组汇总,将所有"Otros"行的数值合并为总和。

问题2:降序排列且"Otros"固定在最后

调整因子顺序,让非"Otros"类别按gr_sum降序排列,再把"Otros"强制放在最后位置。


完整代码实现

library(tidyverse)

# 1. 数据预处理:合并Otros类别并调整顺序
Cred_by_Prod_processed <- Cred_by_Prod %>%
  # 按Cat_top分组,计算每个类别的总和
  group_by(Cat_top) %>%
  summarise(
    gr_sum = sum(gr_sum),
    prop = sum(prop)
  ) %>%
  ungroup() %>%
  # 调整因子顺序:非Otros按gr_sum降序,Otros放在最后
  mutate(
    Cat_top = fct_reorder(Cat_top, -gr_sum),
    Cat_top = fct_relevel(Cat_top, "Otros", after = Inf)
  )

# 2. 绘制柱状图
ggplot(Cred_by_Prod_processed, aes(x = Cat_top, y = gr_sum)) +
  geom_bar(stat = "identity", alpha = .6, width = .4) +
  theme_bw() +
  coord_flip() +
  theme(axis.text.x = element_text(angle = 90)) +
  labs(
    title = "Colocaciones Finagro por Producto 2000-2021",
    x = "Cultivo",
    y = "Billones $COP"
  ) +
  # 显示总和数值标签
  geom_label(
    aes(label = round(gr_sum, 1)),
    nudge_x = 0.1, nudge_y = -1,
    check_overlap = TRUE,
    label.padding = unit(0.1, "lines"),
    label.size = 0.0001,
    color = "black"
  ) +
  # 显示百分比标签
  geom_label(
    aes(label = paste(round(prop * 100, 1), "%")),
    nudge_x = 0.1, nudge_y = 2,
    check_overlap = TRUE,
    color = "black", size = 3
  )

关键说明

  • 分组汇总:通过group_by(Cat_top)和summarise将所有"Otros"行的gr_sum和prop合并为总和,确保每个类别只有一行数据,标签不再重复。
  • 因子排序:fct_reorder(Cat_top, -gr_sum)让非"Otros"类别按数值从大到小排列,fct_relevel强制把"Otros"放到最后位置。
  • 标签绑定:绘图时geom_label使用aes(label=...)绑定处理后的数据列,避免引用原数据导致的标签错位问题。

内容的提问来源于stack exchange,提问作者julian carreño

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:06:28