在R ggplot2中,如何自动绘制垂直线

In R ggplot2 ,how to draw vertical lines automatically

在 R ggplot2 中,如何在列之间绘制垂直线

使用'geom_vline(xintercept=as.numeric(plot_data$mperiod)+0.5)',没用

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')+
  geom_vline(xintercept=as.numeric(plot_data$mperiod)+0.5)

使用'geom_vline(xintercept=c(1:3)+0.5)'时没问题,但我必须手动输入矢量。因为实际上,情况有点复杂,我想自动计算。任何人都可以帮忙吗?谢谢

plot_data %>% ggplot(aes(x=mperiod,y=amount))+
      geom_bar(stat='identity')+
     geom_vline(xintercept=c(1:3)+0.5)

这是一个解决方案,我可以帮助你。

library(tidyverse)

plot_data %>%
  ggplot(aes(x=mperiod,y=amount))+
  geom_bar(stat='identity')+
  geom_vline(aes(xintercept = parse_number(mperiod) + .5))

在内部,geom_barplot 将字符标签转换为整数 1,2,3, ...。这些用作条的位置。 获取垂直线位置的一种方法是将字符向量mperiod转换为因子,然后转换为numeric,然后它们将变为1,2,3...。然后加上 0.5(定位在柱之间)。

library(magrittr)
library(ggplot2)
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')+
  geom_vline(aes(xintercept=as.numeric(as.factor(mperiod))+0.5))

如果您不想要右端的线,可以使用以下一种方法。 诀窍是减去 0.5 而不是加号,所以位置是 0.5, 1.5, ...。并使用 pmax 将 0.5 移动到 1.5。

plot_data %>% ggplot(aes(x=mperiod,y=amount))+
  geom_bar(stat='identity')+
  geom_vline(aes(xintercept=pmax(1.5, as.numeric(as.factor(mperiod))-0.5)))