2015-01-15 91 views
4

我有下面的代碼,包括隨機生成的演示數據:stat_sum和stat_identity給奇怪的結果

n <- 10 
group <- rep(1:4, n) 
mass.means <- c(10, 20, 15, 30) 
mass.sigma <- 4 
score.means <- c(5, 5, 7, 4) 
score.sigma <- 3 
mass <- as.vector(model.matrix(~0+factor(group)) %*% mass.means) + 
    rnorm(n*4, 0, mass.sigma) 
score <- as.vector(model.matrix(~0+factor(group)) %*% score.means) + 
    rnorm(n*4, 0, score.sigma) 
data <- data.frame(id = 1:(n*4), group, mass, score) 
head(data) 

其中給出:

id group  mass score 
1 1  1 12.643603 5.015746 
2 2  2 21.458750 5.590619 
3 3  3 15.757938 8.777318 
4 4  4 32.658551 6.365853 
5 5  1 6.636169 5.885747 
6 6  2 13.467437 6.390785 

然後我想繪製「分數」的總和通過 「組」 分組,以條狀圖:

plot <- ggplot(data = data, aes(x = group, y = score)) + 
    geom_bar(stat="sum") 
plot 

這給了我: enter image description here

古怪,使用stat_identity似乎給我找的結果:

plot <- ggplot(data = data, aes(x = group, y = score)) + 
    geom_bar(stat="identity") 
plot 

enter image description here

這是一個錯誤?在R上使用ggplot2 1.0.0

platform  x86_64-pc-linux-gnu   
arch   x86_64      
os    linux-gnu     
system   x86_64, linux-gnu   
status          
major   3       
minor   1.2       
year   2014       
month   10       
day   31       
svn rev  66913      
language  R       
version.string R version 3.1.2 (2014-10-31) 
nickname  Pumpkin Helmet  

或者我在做什麼錯?

+0

我找不到'STAT = 「和」'任何地方的源代碼。誰告訴你它應該工作?你有沒有在文件中的任何地方看到它? –

+2

@DavidArenburg在文檔中查找'stat_sum'。 – Roland

+0

@Roland,是的,但你有沒有在文檔中看過'stat =「sum」'?特別是與'geom_bar'結合? –

回答

6
plot <- ggplot(data = data, aes(x = group, y = score)) + 
    stat_summary(fun.y = "sum", geom = "bar", position = "identity") 
plot 

resulting plot

aggregate(score ~ group, data=data, FUN=sum) 
# group score 
#1  1 51.71279 
#2  2 58.94611 
#3  3 67.52100 
#4  4 39.24484 

編輯:

stat_sum不起作用,因爲它不只是返回的總和。它返回「位置觀測數量」和「該位置在該位置的點數百分比」。它是爲不同的目的而設計的。該文檔說「對散點圖的重疊繪圖很有用」。

stat_identity(種類)的工作原理是因爲geom_bar默認情況下堆疊條。與我的解決方案相比,您的每個組合都有很多條,每組只有一個條形。看看這個:

plot <- ggplot(data = data, aes(x = group, y = score)) + 
    geom_bar(stat="identity", color = "red") 
plot 

還要考慮報警:

Warning message: 
Stacking not well defined when ymin != 0 
+1

好,這個工程,但它仍然不回答我的問題。爲什麼'stat =「sum」'不工作,爲什麼'stat =「identity」'產生我期望從'stat =「sum」'?圖形的語法似乎很好的概念化,但ggplot2有時是這樣一個PITA ... :-( – wnstnsmth

+1

我試圖解釋我的編輯。 – Roland