使用R处理日期时格式化直方图x轴

使用R处理日期时格式化直方图x轴,r,date,histogram,R,Date,Histogram,我正在使用R创建一条流行曲线(每天一种疾病的病例数的直方图),并且正在努力格式化x轴 我知道ggplot提供了非常好的图形和易于操作的轴(),但在本例中,我更喜欢使用hist()命令,因为我同时描述了两种不同的模式,如下所示(我认为在ggplot中不能做类似的事情): 这里的问题是,x轴不是从第一个案例开始的,有太多的记号,我希望能够有一个系统的日期标记,例如,每7天,或每1个月 数据以每个疑似病例一行的形式存储在数据库(dat.geo)中,包括发病日期和郊区信息(直方图中为黑色或白色),如下

我正在使用R创建一条流行曲线(每天一种疾病的病例数的直方图),并且正在努力格式化x轴

我知道ggplot提供了非常好的图形和易于操作的轴(),但在本例中,我更喜欢使用
hist()
命令,因为我同时描述了两种不同的模式,如下所示(我认为在ggplot中不能做类似的事情):

这里的问题是,x轴不是从第一个案例开始的,有太多的记号,我希望能够有一个系统的日期标记,例如,每7天,或每1个月

数据以每个疑似病例一行的形式存储在数据库(dat.geo)中,包括发病日期和郊区信息(直方图中为黑色或白色),如下所示:

> head(dat.geo)
  number age sex       suburb Date_of_Onset
1      1  12   F            x    2011-10-11
2      2  28   M            x    2011-10-10
3      3  15   F            x    2011-10-12
4      4  12   M            y    2011-10-25
5      5  10   F            x    2011-10-15
6      6   9   M            y    2011-10-20
这是我的密码:

pdf(file='1.epi.curve.pdf')
hist(dat.geo$Date_of_Onset[(dat.geo$suburb=="x")], "days", 
 format = "%d %b %y", freq=T, col=rgb(0,0,0,1), axes=T, main="", add=T)
hist(dat.geo$Date_of_Onset[(dat.geo$suburb=="y")], "days", 
 format = "%d %b %y", freq=T, main="", col=rgb(1,1,1,.6), add=T, axes=F)
dev.off()
我尝试过抑制轴,并在以后使用此代码添加一个操纵轴

axis(1, labels=T)
axis(2)
但这就是我得到的(我不知道如何操纵它):

非常感谢你的帮助


感谢

因为您有效地向我们挑战,要求我们提供
ggplot
解决方案,这里是:

dates <- seq(as.Date("2011-10-01"), length.out=60, by="+1 day")

set.seed(1)
dat <- data.frame(
  suburb <- rep(LETTERS[24:26], times=c(100, 200, 300)),
  Date_of_Onset <- c(
    sample(dates-30, 100, replace=TRUE),
    sample(dates,    200, replace=TRUE),
    sample(dates+30, 300, replace=TRUE)
  )
)

library(scales)
library(ggplot2)
ggplot(dat, aes(x=Date_of_Onset, fill=suburb)) + 
  stat_bin(binwidth=1, position="identity") + 
  scale_x_date(breaks=date_breaks(width="1 month"))

dates有两种解决方案;1使用hist()和另一个使用ggplot():

该流行曲线如下:

上述Andrie建议使用ggplot的解决方案如下:

library(scales)
library(ggplot2)
ggplot(dat.geo,aes(x=Date_of_Onset, group=suburb, fill=suburb))+
 stat_bin(colour="black", binwidth=1, alpha=0.5,
 position="identity") + theme_bw()+
 xlab("Date of onset of symptoms")+
 ylab("Number of cases")+
 scale_x_date(breaks=date_breaks("1 month"), labels=date_format("%b %y"))
其流行曲线如下所示:


使用
轴(1,at=x,labels=y)
其中
x
是刻度(数字向量)的坐标,
y
是刻度标签(字符向量)。您可以在
ggplot
中使用
position=“identity”
覆盖条形图,以供您使用-看起来不错,但是我更喜欢这个问题的原始解决方案,因为你可以看到这两条曲线的整体。我会记住这项技术以备将来使用,though@jpolonsky你能解释一下你能完整地看到这两条曲线是什么意思吗?你打算把栅栏叠起来吗?还是为了躲避栅栏?还是别的什么?这些选项中的任何一个都可以在
ggplot
中使用。很抱歉,我刚刚看到,通过在stat_bin命令中添加alpha=0.5,您可以获得透明胶片,这正是我想要的。感谢您提供了这个出色的解决方案@很高兴能帮上忙!谢谢你的建议-我已经找到了问题所在;“日期”和“规模”套餐之间似乎存在互动。两个都加载时,刻度不起作用,但如果不加载“日期”,则工作正常。
library(scales)
library(ggplot2)
ggplot(dat.geo,aes(x=Date_of_Onset, group=suburb, fill=suburb))+
 stat_bin(colour="black", binwidth=1, alpha=0.5,
 position="identity") + theme_bw()+
 xlab("Date of onset of symptoms")+
 ylab("Number of cases")+
 scale_x_date(breaks=date_breaks("1 month"), labels=date_format("%b %y"))