2017-05-30 212 views
1

我想創建R中比例barplot,到目前爲止,我已成功地做這樣的事情:比例barplot R中

library(ggplot2) 
ggplot(data=diamonds)+ 
    geom_bar(aes(x=cut,y=..prop..,fill=color)) 

這顯然是不行的,但同樣沒有這樣的:

ggplot(data=diamonds)+ 
    geom_bar(aes(x=cut,y=..prop..,fill=color,group=1)) 

或本:

ggplot(data=diamonds)+ 
    geom_bar(aes(x=cut,y=..count../sum(..count..),fill=color)) 

這工作:

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

但我希望酒吧在一個類別內並排。

我想要做的是讓比例barplot不前

回答

1

我認爲你需要聚合,然後再使用轉化我的數據position="dodge"

diamonds2 <- aggregate(carat ~ cut + color, diamonds, length) 

ggplot(data = transform(diamonds2, p = ave(carat, cut, FUN = function(x) x/sum(x))), 
     aes(x = cut, y = p, fill=color))+ 
    geom_bar(stat = "identity", position = "dodge") 

所得的情節:

enter image description here

+0

這是不正確的內類別比例不會合計爲一個 – Vitalijs

+0

如果不先進行聚合,可以這樣做嗎? – Vitalijs

+0

您顯示的情節恰好是我想要的情節,但我不想在 – Vitalijs

0

OP的評論後編輯

如果您希望有條件和側方直方圖使用geom_bar(stat = "identity", position = "dodge"),當你打電話給你的條件直方圖與ggplot2(我顯示第100行數據爲清楚起見)

library(ggplot2) 
ggplot(data = diamonds[1:100, ], aes(cut, carat, fill = color)) + geom_bar(stat = "identity", position = "dodge") 
+0

它不是成比例的,即我希望顏色在每個類別中總計爲1,並且我希望酒吧肩並肩 – Vitalijs

+0

我明白了;比例可以用'sum(count)'除以'geom_bar'中的另一個條件來實現,即'position =「dodge」' – Avitus

+0

我應該在哪裏除以總數呢? – Vitalijs