10

私はRを使用して流行曲線(1日あたりの病気の症例数のヒストグラム)を作成している最中であり、x軸のフォーマットに少し苦労しています。

ggplotが非常に優れたグラフと簡単に操作できる軸(日付を理解し、Rでggplot2を使用してヒストグラムをプロットする)を提供することは知っていますが、この場合、hist()2つの異なるパターンを同時に記述しているため、このコマンドを使用することをお勧めします。以下(ggplotで同様のことができるとは思いません):

ここに画像の説明を入力してください

ここでの問題は、x軸が最初のケースで始まらず、目盛りが多すぎることです。たとえば、体系的な日付マーカーを使用できるようにしたいと思います。7日ごと、または毎月1日ごと。

データは、データベース(dat.geo)に、疑わしいケースごとに1行として保存され、以下のように、発症日と郊外(ヒストグラムの黒か白か)に関する情報が含まれます。

> 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)

しかし、これは私が得るものです(そして私はそれを操作する方法がわかりません):

ここに画像の説明を入力してください

あなたの助けは大歓迎です!

ありがとう

4

2 に答える 2

16

あなたは効果的に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"))

position="identity"を使用して各バーを軸に強制的に配置することに注意してください。そうしないと、デフォルトで積み上げグラフが表示されます。

ここに画像の説明を入力してください

于 2012-08-28T14:36:38.193 に答える
10

2つの利用可能なソリューションがあります。1つはhist()を使用し、もう1つはggplot()を使用します。

library(date)
hist(dat.geo$Date_of_Onset[(dat.geo$suburb=="x")], "weeks", 
 format = "%d %b %y", freq=T, col=rgb(0,0,0,1), axes=F, main="")
hist(dat.geo$Date_of_Onset[(dat.geo$suburb=="y")], "weeks", 
 format = "%d %b %y", freq=T, main="", col=rgb(1,1,1,.6), add=T, axes=F)
axis.Date(1, at=seq(as.Date("2011-10-10"), as.Date("2012-03-19"), by="2 weeks"),
 format="%d %b %y")
axis.Date(1, at=seq(as.Date("2011-10-10"), as.Date("2012-03-19"), by="weeks"), 
 labels=F, tcl= -0.5)

この流行曲線は次のとおりです。

ここに画像の説明を入力してください

上記の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"))

これは、以下のような流行曲線を示します。

ここに画像の説明を入力してください

于 2012-09-04T15:54:50.973 に答える