R语言ggplot2中如何自动绘制柱状图列间的垂直分隔线
问题原因
你原先的代码不生效是因为:as.numeric(plot_data$mperiod)+0.5生成的是1.5、2.5、3.5、4.5四个值,其中4.5位于最右侧柱子的外侧,不属于列间分隔的位置,且你只需要n-1条分隔线(n为x轴分类总数)。
离散x轴的分类默认对应1到n的正整数坐标,列间分隔线的位置就是1.5、2.5...(n-1).5。
自动实现方案
直接通过统计x轴分类数量自动生成分隔线位置即可,适配任意分类数场景,无需手动指定范围:
library(ggplot2) library(dplyr) # 示例数据,可替换为任意业务数据 plot_data <- data.frame(mperiod=paste0('Q',1:4),amount=c(1:4)) plot_data %>% ggplot(aes(x=mperiod,y=amount))+ geom_bar(stat='identity')+ # 自动计算分隔线位置:n_distinct统计x轴分类数,生成分隔线坐标 geom_vline(xintercept = seq(n_distinct(plot_data$mperiod) - 1) + 0.5)
如果没有加载dplyr,也可以用base R的写法:
geom_vline(xintercept = seq(length(unique(plot_data$mperiod)) - 1) + 0.5)
内容的提问来源于stack exchange,提问作者anderwyang
相关产品推荐
相关产品推荐

