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

