优雅地在R中为ggplot2轴标签创建序列中的字符串

时间:2014-04-25 10:07:09

标签: r ggplot2

我试图用ggplot标记多年,但保持3个月的刻度,所以要求:

labels = c(0,"","","", 12,"","","", 24,"","","", 36...)
稍微整洁的是:

labels = c(0,rep("",3),12,rep("",3),24,rep("",3),36...)

必须以编程方式创建它。

gsub("," , ",'','',''," ,"0,12,24,36" )

已接近,但我管理的唯一实际工作解决方案是

labels=c()
for (i in 0:3){ labels<-c(labels,i*12,rep("",3)) }

我确定必须有一个优雅的解决方案,任何人都可以提出一个吗?

2 个答案:

答案 0 :(得分:2)

我使用seq创建一个向量,并使用模运算符(%%)来删除我不想要的条目...

# Some data
df <- data.frame( x=seq(0,36) , y = rnorm(37) )

# Make quarterly labels  
lab <- seq(0,36,by=3)

# Blank everything that is not evenly divisible by 12 months
lab[ lab %% 12 > 0 ] <- ""

# Plot
ggplot( df , aes(x,y) ) + geom_point() +
  scale_x_continuous( breaks = seq(0,36,by=3) , labels = lab )

enter image description here

答案 1 :(得分:0)

这将创建10年(40个条目)的序列

lbls <- rep("", 40)   ## start empty vector
lbls[1+4*0:9] <- 12*0:9   ## selectively replace values with multiples of 12

我希望有所帮助。