2017-10-14 114 views
0

我想繪製變量值之和的比例,而不是觀察次數的比例。ggplot2 - 條形圖總和的比例

至於後者,觀察值對於給定的分類(例如,切割)的比例可以進行像這樣:

library(ggplot2) 

ggplot(data=diamonds) + 
geom_bar(aes(x=cut,y=..count../sum(..count..)),position="dodge") 

爲了在信息使從諸如「價格另一個變量的值」,一個可以映射到‘y’和使用‘身份’的概念:

ggplot(data=diamonds) + 
geom_bar(aes(x=cut,y=price),stat="identity",position="dodge") 

不過,我想都繪製一個變量的值的總和的比例(例如價格的總和)相結合因此,人們不得不映射感興趣的變量(例如, G。價格)來表示,然而,除了阻止y的比例計算,我還沒有看到一個明顯的方式來除了彙總數據(我想避免)。 '

爲了使我的內涵可能更清晰,理想的解決方案看起來也許是這樣的:

ggplot(data=diamonds) + 
geom_bar(aes(x=cut,y=..sum(price)../sum(..sum(price)..)),position="dodge") 

回答

1
library(ggplot2) 
library(data.table) 
df <- data.table(data.frame(diamonds)) 
df <- df[,.(value = sum(price)), by = cut] 

windows() 
ggplot(data = df, aes(x = cut, y = value/sum(value))) + 
    geom_bar(position="dodge", stat="identity") 

** New Answer ** 

library(ggplot2) 
library(data.table) 
df <- data.table(data.frame(diamonds)) 

windows() 
ggplot(data = df[,.(value = sum(price)), by = cut], aes(x = cut, y = value/sum(value))) + 
    geom_bar(position="dodge", stat="identity") 
+0

儘管這種解決方案作品,我理想地尋找原生ggplot2解決方案(可能不存在)。如果不是原生解決方案,我會等待更長的時間來尋找其他答案,並接受這個解決方案。 –

+0

什麼是原生ggplot2? –

+0

我的意思是不使用任何先前的數據操作,即使用數據,因爲它讓ggplot在構建函數等內部進行計算。 –

1

你可以用dplyr做到這一點:

diamonds %>% 
    group_by(cut) %>% 
    mutate(sum_price = sum(price)) %>% 
    mutate(prop_sum = price/sum_price) %>% 
    ggplot(aes(cut, prop_sum)) + 
     geom_bar(stat = "identity", position = "dodge")