2011-12-02 64 views
6

我一直在使用ggplot创建绘图,并且我总是喜欢水平偏移我的数据点,因此误差线不会重叠。我发现当我将Date数据用于我的x轴时,我失去了抵消数据点的能力。R和ggplot-将x轴更改为Date删除位置闪避

DF=data.frame(Date=c("2006-09-01", "2007-09-01", "2008-09-01" ,"2009-09-01", "2010-01-01" ,"2011-01-01"),Count=c(1,2,3,4,5,6,2,4,6,8,10,12),Type=c('A','A','A','A','A','A','B','B','B','B','B','B')) 

如果我使用ggplot这样绘制上面的数据帧,这些点偏移

dodge=position_dodge(.5) 
ggplot(data=DF,aes(x=Date,y=Count,group=Type))+geom_point(position=dodge) 

但是,如果我指定的日期数据为实际日期

DF$Date=as.Date(DF$Date) 
ggplot(data=DF,aes(x=Date,y=Count,group=Type))+geom_point(position=dodge) 

点是不再抵消,即使我指定他们是

我已经避免了这个问题在过去通过将我的日期数据限制为仅“年”并将其视为数字。但现在我需要包含月份信息(我包括在我的日期,因为“as.Date有点时髦,如果我不包括它)012天。绘制时间序列使用ggplot,让我弥补我的数据点和误差线。

回答

9

其实点稍微回避。

你需要记住有一年的间隔为365天。 position_dodge(0.5)移动点(半天)/ 2。 因此,位置移动一年间隔的0.5/2/365。

如果您选择`position_dodge(0.5 * 365),那么你会得到的情节预期:

DF <- data.frame(
    expand.grid(Date=c("2006-09-01", "2007-09-01", "2008-09-01" ,"2009-09-01"), 
    Type = c("A", "B")), 
    Count = 1:4) 
DF$Date2 <- as.Date(DF$Date) 

ggplot(data=DF,aes(x=Date2,y=Count,group=Type))+ geom_point(position = position_dodge(365*0.5)) 

enter image description here

+0

天才!感谢你的回答 – Vinterwoo