使用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
相关产品推荐
相关产品推荐

