ggplot柱状图:修改灰色柱体颜色及自定义图例的实现咨询
问题解决方案
Q1:替换深灰色为浅灰色且不显示在图例中
完全可行。原始代码中对应Length1的第一个geom_bar默认用深灰色,是因为未指定填充色。直接给它设置固定浅灰色且不将填充色映射到美学变量,就不会生成对应图例。修改后的代码如下:
df <- structure(list(ID = c("A", "B", "C", "D"), Length1 = c(15, 12, 6, 9), Length2 = c(7, 8, 3, 9)), row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame")) library(ggplot2) ggplot(data = df) + geom_bar(aes(y = ID, x = Length1), stat = "identity", fill = "lightgrey") + # 固定浅灰色,无图例 geom_bar(aes(y = ID, x = Length2, fill = ID), stat = "identity")
说明:将fill = "lightgrey"放在aes()外,仅修改柱体颜色,不会触发图例生成。
Q2:为灰色柱体添加独立图例“Length1-Length2”
可以借助ggnewscale包实现双独立图例(ggplot默认同一美学属性仅能生成一个图例),具体实现如下:
步骤1:安装并加载依赖包
install.packages("ggnewscale") library(ggnewscale)
步骤2:绘制带双独立图例的图表
ggplot(data = df) + # 映射灰色柱体的fill到自定义标签,并设置颜色 geom_bar(aes(y = ID, x = Length1, fill = "Length1-Length2"), stat = "identity") + scale_fill_manual(name = "Length1-Length2", values = "lightgrey") + # 开启新的fill图例空间,分隔前后两个fill图例 new_scale_fill() + # 保留原ID的fill映射 geom_bar(aes(y = ID, x = Length2, fill = ID), stat = "identity") + # 自定义ID图例的名称(可选,按需调整) scale_fill_discrete(name = "ID")
说明:
- 第一个
scale_fill_manual专门控制灰色柱体的图例,名称设为“Length1-Length2”,对应颜色为浅灰色 new_scale_fill()是ggnewscale的核心函数,让后续的fill美学属性生成独立图例,不会与前面的图例合并
内容的提问来源于stack exchange,提问作者Stataq
相关产品推荐
相关产品推荐

