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

使用ggplot2绘制带总计占比标签的条形图并自定义供应链配色

解决你的ggplot条形图需求

我来帮你搞定这个条形图的问题!你之前用scale_colour_manual没成功,是因为条形图的填充色需要用scale_fill_manual(colour控制的是线条/边框颜色,而我们要设置的是条形内部的填充色)。下面是完整的实现代码,包含所有你需要的功能:

步骤1:准备数据并计算百分比

首先我们先把你的数据转换成数据框,同时计算每个SupplyChain的数值占总计的百分比:

library(tidyverse)

# 构建数据框
df <- tibble(
  SupplyChain = c("A", "B", "C"),
  Value = c(1000, 2000, 3000)
) %>%
  # 计算占总计的百分比,保留两位小数
  mutate(
    total = sum(Value),
    percentage = round((Value / total) * 100, 2),
    percentage_label = paste0(percentage, "%")
  )

步骤2:绘制带双标签+自定义颜色的条形图

接下来用ggplot绘制图形,同时实现所有需求:

ggplot(df, aes(x = SupplyChain, y = Value, fill = SupplyChain)) +
  # 绘制条形图
  geom_col() +
  # 添加条形顶端的数值标签(位置稍微向上偏移)
  geom_text(
    aes(label = Value),
    vjust = -0.3,  # 向上偏移避免和条形重叠
    size = 4
  ) +
  # 添加条形内部的百分比标签(白色文字,向下偏移)
  geom_text(
    aes(label = percentage_label),
    vjust = 1.5,  # 向下偏移到条形内部
    color = "white",
    size = 4
  ) +
  # 手动指定每个SupplyChain的填充颜色
  scale_fill_manual(
    values = c(
      "A" = "#E74C3C",  # 红色
      "B" = "#3498DB",  # 蓝色
      "C" = "#2ECC71"   # 绿色
    )
  ) +
  # 设置坐标轴标签和主题
  labs(
    x = "SupplyChain",
    y = "Value",
    title = "SupplyChain Value Distribution"
  ) +
  theme_minimal() +
  # 去掉图例(因为x轴已经标注了类别)
  theme(legend.position = "none")

代码说明

  • geom_col():用于绘制分类变量的条形图(和geom_bar(stat="identity")效果一致)
  • 两个geom_text():分别实现顶端的数值标签和内部的百分比标签,通过vjust参数调整位置避免重叠
  • scale_fill_manual():这是你之前出错的关键,用它来设置条形的填充颜色,对应aes(fill = SupplyChain)的映射
  • 最后通过theme(legend.position = "none")去掉图例,因为x轴已经清晰标注了每个类别

运行这段代码后,你就能得到符合需求的条形图:每个条形顶端显示对应数值,内部显示占总计的百分比,并且每个SupplyChain都有你指定的颜色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 23:02:32