2017-05-08 33 views
1

我有一個這樣的數據框('示例')。圖表時間序列在ggplot2與CDC星期明智訂購

 n CDCWeek Year Week 
25.512324 2011-39 2011 39 
26.363035 2011-4 2011 4 
25.510500 2011-40 2011 40 
25.810663 2011-41 2011 41 
25.875451 2011-42 2011 42 
25.860873 2011-43 2011 43 
25.374876 2011-44 2011 44 
25.292944 2011-45 2011 45 
24.810807 2011-46 2011 46 
24.793090 2011-47 2011 47 
22.285000 2011-48 2011 48 
23.015480 2011-49 2011 49 
26.296376 2011-5 2011 5 
22.074581 2011-50 2011 50 
22.209183 2011-51 2011 51 
22.270705 2011-52 2011 52 
25.391377 2011-6 2011 6 
25.225481 2011-7 2011 7 
24.678918 2011-8 2011 8 
24.382214 2011-9 2011 9 

我想繪製這個與「CDCWeek」時間序列爲使用此代碼X軸和「n」爲Y。

ggplot(Example, aes(CDCWeek, n, group=1)) + geom_line() 

我遇到的問題是它沒有按照正確的順序顯示CDCWeek。 CDCWeek是一週之後的一年(1至52或53取決於年份)。它按照數據框中顯示的順序進行繪製,2011-39之後是2011-4等。我明白爲什麼會發生這種情況,但無論如何要強制ggplot2使用正確的週數?

編輯:我不能只使用'星期'變量,因爲實際數據集涵蓋多年。

謝謝

+1

對不起,如果這是顯而易見的,但你可以在x軸上使用「周」變量? – Nancy

+0

哦,對不起。我不清楚。這個數據框只是實際涵蓋多年的一部分。 –

回答

0

事實證明,我不得不正確排序例子$ CDCWeek然後ggplot會正確繪製它。

1)按照正確的順序放入數據庫。

Example <- Example[order(Example$Year, Example$Week), ] 

2)重置rownames。

row.names(Example) <- NULL 

3)根據觀察數

Example$CDCWeek <- factor(Example$CDCWeek, levels=Example$CDCWeek[order(Example$Obs)], ordered=TRUE) 

5與來自rownames

Example$Obs <- as.numeric(rownames(Example)) 

4的觀察數創建一個新變量)訂購CDCWeeks變量作爲因子)它圖

ggplot(Example, aes(CDCWeek, n, group=1)) + geom_line() 

非常感謝大家的幫助!

0

轉換的年份和周成日期與dplyr

df <- df %>% 
     mutate(date=paste(Year, Week, 1, sep="-") %>% 
        as.Date(., "%Y-%U-%u")) 

ggplot(df, aes(date, n, group=1)) + 
    geom_line() + 
    scale_x_date(date_breaks="8 week", date_labels = "%Y-%U") 

enter image description here

+0

這大部分工作。唯一的問題是,r強加自己的周編號。這是一個問題,因爲CDC周(又名epi周或流行病周)與r使用的週數不完全相同。 CDC星期從星期日開始,從1到52到53(取決於年份),第1周是第一個星期,新日曆年至少有4天。 –

0

一個辦法是通過使用你已經擁有的年份和星期變量,但小年。我稍微改變了你的數據中的年份變量來做我的情況。

Example$Year = rep(2011:2014, each = 5) 

ggplot(Example, aes(x = Week, y = n)) + 
    geom_line() + 
    facet_grid(Year~., scales = "free_x") 
    #facet_grid(.~Year, scales = "free_x") 

這有附加的優勢,可以跨年進行比較。如果您將最後一行切換到我已註釋掉的選項,那麼這些方面將是水平的。

enter image description here

另一種選擇是由組年度作爲一個因子水平,包括他們都在同一個人物。

ggplot(Example, aes(x = Week, y = n)) + 
    geom_line(aes(group = Year, color = factor(Year))) 

enter image description here