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

ggplot柱状图按变量匹配填充色并设置分类alpha透明度的方法

解决方案

原代码存在数据集维度不匹配的小问题,修正数据集构造逻辑后调整ggplot的映射规则即可实现需求,完整可运行代码如下:

library(dplyr)
library(ggplot2)

# 设定随机种子保证结果可复现,可删除
set.seed(123)
# 修正数据集构造,保证维度匹配
Test.df <- data.frame(
  Value = runif(51),
  Category = rep(factor(c("A", "B", "C")), 17),
  Variable = rep(c("ZA", "ZB", "ZC", "ZD", "ZE", "ZF", "ZG", "ZH", "ZI", "ZJ", "ZK", "ZL", "ZM", "ZN", "ZO", "ZP", "ZQ"), each = 3)
) %>% arrange(Variable, Category)

Colors <- c("#E8223D","#E4B533","#4BA046","#C7202F","#EF402C","#27BFE5","#FBC413","#A21C43","#F26A2D","#DE1768","#F99D29","#BF8D2C","#407F46","#1E97D4","#5ABA47","#136A9F","#15496B")

Bar.Plot <-
  ggplot(Test.df, aes(x = Variable, y = Value, group = Category)) +
  geom_bar(stat="identity",
           width = 0.8,
           position = position_dodge(width = 0.9), 
           aes(fill = Variable, alpha = Category)) +
  scale_fill_manual(values = Colors) +
  # 可自行调整三个分类对应的透明度数值
  scale_alpha_manual(values = c("A" = 1, "B" = 0.7, "C" = 0.4))

Bar.Plot

实现逻辑说明

  • 需求1实现:将fill填充色映射到Variable变量,通过scale_fill_manual直接传入给定的颜色列表,即可实现同一变量的3根柱子共用同一种填充色,不同变量按列表顺序依次取色。
  • 需求2实现:将alpha透明度映射到Category变量,通过scale_alpha_manual自定义A、B、C三个分类对应的透明度数值,即可在同色基础上区分同一变量下的不同分类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:24:10