如何用ggplot绘制仅偶数序号柱带蓝色边框的堆叠柱状图
解决ggplot堆叠柱状图仅给偶数序号柱子加蓝色边框的问题
你当前的代码给所有柱子都加了蓝色边框,是因为第二个geom_bar的colour是全局设置,没有区分柱子的位置序号。要实现仅偶数序号(第2、4、6…个)柱子显示蓝色边框,可以按以下方式修改代码:
library(ggplot2) test <- as.data.frame(cbind(a = c(1, 1, 2, 3), b = 1:4, c = as.character(1:4))) ggplot(test) + geom_bar(aes(x = a, y = b, fill = c), stat = "identity") + geom_bar( aes(x = a, y = b, group = a, # 根据柱子的位置序号判断,偶数序号设为蓝色,否则设为NA(不显示边框) colour = ifelse(as.integer(factor(a)) %% 2 == 0, "blue", NA)), stat = "summary", fun = sum, fill = "transparent" ) + # 直接使用指定的颜色值,不进行额外映射 scale_colour_identity()
关键修改说明:
as.integer(factor(a)):将x轴的分类值转换为对应的位置序号(比如第一个出现的x值序号为1,第二个为2,以此类推),这样就能准确判断哪些是偶数序号的柱子。ifelse(..., "blue", NA):仅给偶数序号的柱子设置蓝色边框,其他柱子的边框颜色设为NA,不会显示。scale_colour_identity():因为我们直接使用了颜色字符串("blue"),需要通过这个尺度告诉ggplot直接使用这些值,而不是自动映射到默认颜色 palette。
这样修改后,就只有第2、4、6…等偶数序号的柱子会显示蓝色边框,其他柱子无边框,符合你的期望效果。
内容的提问来源于stack exchange,提问作者quick2063
相关产品推荐
相关产品推荐

