2017-08-17 86 views
0

我想使用下面的代碼,這是基於http://dantalus.github.io/2015/08/16/step-plots/我的累積面積圖堆棧。我已在position=stack中添加,但情節仍然重疊。如何讓我的區域圖使用ggplot進行堆棧?

我試圖實現的目標是顯示特定時期內每年出版物的累計數量。因此,作爲一個例子,在1940年可能有一個出版物,第二年可能會有兩個,累計總數爲3.

什麼是最好的方式來讓區域堆疊在每個其他?

訂單如何控制?我需要用arrange()訂購TERM2嗎?

ggplot(data=working, aes(x=Year, color=TERM2, fill=TERM2)) + 
    stat_bin(data = subset(working, TERM2=="A"), bins=80, aes(y=cumsum(..count..)),geom="area", position="stack", alpha=0.1) + 
    stat_bin(data = subset(working, TERM2=="B"), bins=80, aes(y=cumsum(..count..)),geom="area", position="stack",alpha=0.1) + 
    stat_bin(data = subset(working, TERM2=="Both"),bins=80, aes(y=cumsum(..count..)),geom="area", position="stack", alpha=0.1) + 
    ylab("Total Number") + xlim(1940,2020) + ggtitle("Cumulative number by measurement method") 

什麼我目前得到:

下圖是使用相同的數據在Excel中創建的:什麼,我想實現

Cumulative Area Plot

例這正是我期待在R中實現的。

Excel Example

我的數據:我的數據目前的結構

示例:基於user127649的建議

Year TERM2 
1944  A 
1959  B 
1966  A 
1968  B 
1968  A 
1970  A 
1971  B 
1971  B 
1971  A 
1971  A 
1971 Both 
1971 Both 
1971 Both 
1972  A 
1972 Both 
1972 Both 
1973  B 
1973  A 
1974  A 
1974  A 

'data.frame': 803 obs. of 6 variables: 
$ Year   : int 1944 1959 1966 1968 1968 1970 1971 1971 1971 1971 ... 
$ TERM2   : Factor w/ 3 levels "B","A","Both": 2 1 2 1 2 2 1 1 2 2 ... 

變化

這是陰謀user127649的建議後離子,這與我所期望的接近,除了我期待它從0開始到803(出版物總數)。

ggplot(data=working, aes(x=Year, color=TERM2, fill=TERM2)) + 
    stat_bin(bins=80, aes(y=cumsum(..count..)), geom="area", alpha=0.1) + 
    ylab("Total Number") + xlim(1940,2020) + ggtitle("Cumulative number by measurement method") 

after suggestions

回答

0

我認爲有兩個問題。

  1. 當您使用三個獨立stat_bin()層,每層實際上有它自己獨立的數據集。這會給出正確的計數,但是(這實際上是一種猜測)我認爲在三個單獨的層中意味着你不能堆疊它們。

  2. 如果您在所有圖層上使用stat_bin(),我認爲stat = '..count..'對整體數據執行cumsum()

我不知道這是否是最好的方法還是不行,但是我認爲這是你以後。

數據

的數據被分組和被cumsum()單獨使用對每個組。

library(tidyverse) 

working <- working %>% 
    count(Year, TERM2) %>% 
    spread(TERM2, n, fill = 0) %>% 
    mutate_at(vars('A', 'B', 'Both'), cumsum) %>% 
    gather(TERM2, N, -Year, factor_key = T) #%>% 
    # mutate(TERM2 = ordered(TERM2, levels = rev(levels(TERM2)))) 

情節

此代碼將產生下面的第一個情節。如果您更喜歡第二個圖的外觀,則可以取消註釋數據操作塊的最後一行。

ggplot(working, aes(Year, N, fill = TERM2)) + 
    geom_area(position = 'stack') + 
    ylab("Total Number") 

結果

enter image description here

+0

感謝@ user127649,出現現在正常工作。非常感謝您的幫助。 – rockdoctor