2015-10-08 49 views
1

我有興趣製作一個規範化的趨勢圖,並且可以隨時間推移分享趨勢。下面是一個例子:在R中創建「規範化份額」圖R

http://stevecoast.com/wp-content/uploads/2012/02/normalised-phone-share2-001.jpg

我使用的數據僅僅是2個因素(1,0),所以將有兩種顏色。共有3178個觀測值。我不確定是否有一個函數可以讓我以這種形式保存數據或者需要進行轉換。

set.seed(124) 
variableValue <- sample(0:1, 20, replace = TRUE) 
set.seed(124) 
timePeriod <-sort(sample(letters[1:5], 20, replace=TRUE)) 
sort(timePeriod) 
data<-data.frame(variableValue,timePeriod) 
data 

我覺得ggplot是最好的選擇,但我對於從哪裏開始感到非常失望。

任何意見都會很棒。謝謝。

+1

開始與共享(或模擬)數據作出[再現的示例](http://stackoverflow.com/q/5963269/903061)。 – Gregor

+0

你真的有你的x軸的分類變量嗎?不是日期或時間? – Gregor

回答

1

既然你想variableValue斷然處理,我們會先將其轉換爲一個因素:

data$variableValue = factor(data$variableValue) 

你可以做很多內部ggplot數據操作的,但我更願意爲更好的透明度,做到這一點,事前。

library(dplyr) 
dat_summ = data %>% group_by(timePeriod) %>% 
    mutate(n_time = n()) %>% 
    group_by(timePeriod, variableValue) %>% 
    summarize(proportion = n()/first(n_time)) 

這使得每TIMEPERIOD每variableValue一行,併爲每個比例列的數據幀:正是我們想繪製。

ggplot(dat_summ, aes(x = timePeriod, y = proportion, 
        fill = variableValue, group = variableValue)) + 
    geom_area() + 
    scale_y_continuous(labels = scales::percent) 

然後我們可以繪製。我們指定映射到x和y軸並填充顏色的變量,並且由於我們在x軸上有一個分類變量,因此我們需要指定一個「連接點」的定義groupgeom_area是一個填充區域圖,默認情況下會像我們想要的那樣將區域堆疊在彼此之上。爲了看上,我指定在y軸上使用百分比尺度 - 否則這整行可能會被忽略。

enter image description here

+0

複製並粘貼您的代碼後 - 我不斷收到錯誤:變量'n_total'未找到.....我是否缺少一個包? –

+0

@MarkRomano不,對不起。我將'n_total'重命名爲'n_time',但並沒有在兩個地方都顯示出來。現在應該工作。 – Gregor

+0

Gotcha ....我對dplyr軟件包不太熟悉(儘管我應該!),並認爲它可能是一個特殊的關鍵字。像魅力一樣工作,謝謝! –