使用x轴字符添加条件垂直线

时间:2016-06-07 04:37:48

标签: r ggplot2

即使在这里查看类似的问题geom-vline-with-character-xintercept,我也找不到办法。

基本上,我尝试将垂直线添加到x值,垂直线位置可以使用levels(theDF$YrQtr)[c(T, rep(F, 2))]代码分配。

但是收到错误,如下所示。我无法找到答案。

可重复的示例代码;

theGrid <- expand.grid(2009:2011, 1:4)
theDF <- data.frame(YrQtr=sprintf("%s Q%s", theGrid$Var1, theGrid$Var2), 
                    Minutes=c(1000, 2200, 1450, 1825, 1970, 1770, 1640, 1920, 1790, 1800, 1750, 1600))

ggplot(theDF, aes(x=YrQtr, y=Minutes)) + 
         geom_point() + 
         theme(axis.text.x=element_text(angle=90))+
geom_vline(aes(xintercept =  levels(theDF$YrQtr)[c(T, rep(F, 2))]))
  

错误:美学必须是长度1或与数据(12)相同:xintercept

1 个答案:

答案 0 :(得分:1)

首先,您不必对aes使用geom_vline。您只需要提供值。其次,ggplot会在生成绘图时将字符变量转换为数字。因此,您还需要转换值。您可以通过添加seq_along来完成此操作。它隐含地将字符更改为数值(1,2,3 ......)。

ggplot(theDF, aes(x=YrQtr, y=Minutes)) + 
  geom_point() + 
  theme(axis.text.x=element_text(angle=90))+
  geom_vline(xintercept=seq_along(levels(theDF$YrQtr))[c(T, rep(F, 2))])

enter image description here