2013-03-27 49 views
14

我做的哪裏y=agex=Patient groups如何在每組中添加多個觀察值並在ggplot2 boxplot中使用組平均值?

age <- ggplot(data, aes(factor(group2), age)) + ylim(15, 80) 
age + geom_boxplot(fill = "grey80", colour = "#3366FF") 

我希望你能幫助我的幾件事情基本箱線圖:

1)是否有可能包括上述一些每組觀察每個組boxplot(但不是在我的組標籤的X軸上),而不必在油漆:)這樣做? 我已經嘗試使用:

age + annotate("text", x = "CON", y = 60, label = "25") 

其中CON是第一組和y = 60是〜剛箱線圖這組以上。但是,該命令不起作用。我認爲它有一些事情要做,它把x看作一個連續的而不是一個分類變量。

2)雖然有很多關於使用均值而不是中值的問題,但我還沒有找到適合我的代碼?

3)同樣的問題,有沒有辦法可以在boxplot中包含平均羣體屬性?也許使用

age + stat_summary(fun.y=mean, colour="red", geom="point") 

然而,其中只包括一個點的意思所在。或者用

age + annotate("text", x = "CON", y = 30, label = "30") 

其中CON是第一組和y = 30是〜組齡平均。 知道如何靈活和豐富的ggplot2語法是我希望有一個更優雅的方式使用真正的統計輸出,而不是annotate

任何建議/鏈接將不勝感激!

謝謝!

+0

箱線圖通常有分鐘,下部,中部和上部位數最後一個最大值。你已經有了.25,.5和.75分位數。這信息不夠嗎? – Arun 2013-03-27 14:23:14

+0

這是我所要求的格式。 – user1442363 2013-03-27 14:29:59

回答

24

這是什麼你喜歡什麼?隨着stat_summary,如要求:

# function for number of observations 
give.n <- function(x){ 
    return(c(y = median(x)*1.05, label = length(x))) 
    # experiment with the multiplier to find the perfect position 
} 

# function for mean labels 
mean.n <- function(x){ 
    return(c(y = median(x)*0.97, label = round(mean(x),2))) 
    # experiment with the multiplier to find the perfect position 
} 

# plot 
ggplot(mtcars, aes(factor(cyl), mpg, label=rownames(mtcars))) + 
    geom_boxplot(fill = "grey80", colour = "#3366FF") + 
    stat_summary(fun.data = give.n, geom = "text", fun.y = median) + 
    stat_summary(fun.data = mean.n, geom = "text", fun.y = mean, colour = "red") 

黑數是觀測的數量,紅色數字是平均值。joran的回答顯示瞭如何把數字在框中 頂部enter image description here

帽尖:https://stackoverflow.com/a/3483657/1036500

+3

有關此答案的變體,其中包括如何使用'n = 11'等進行註釋,請參閱:http://stackoverflow.com/a/15720769/1036500 – Ben 2013-03-30 16:35:12

+0

label = rownames(mtcars)在ggplot中做什麼命令? – alily 2016-10-19 15:06:51

3

解答第一個問題。 要顯示框上方的值,您應該提供x值作爲數字而不是級別名稱。因此,繪製高於第一個值的值給x=1

data(ToothGrowth) 
ggplot(ToothGrowth,aes(supp,len))+geom_boxplot()+ 
    annotate("text",x=1,y=32,label=30) 
+0

嗨!萬分感謝。我實際上最初嘗試了數字/水平,但由於某種原因,沒有任何工作。現在很好,非常感謝。 – user1442363 2013-03-27 14:20:25

+0

註釋命令完美解決定位問題!非常感謝 – Mac 2016-05-14 13:24:32

15

我想這就是你正在尋找的?

myboxplot <- ddply(mtcars, 
        .(cyl), 
        summarise, 
        min = min(mpg), 
        q1 = quantile(mpg,0.25), 
        med = median(mpg), 
        q3 = quantile(mpg,0.75), 
        max= max(mpg), 
        lab = length(cyl)) 
ggplot(myboxplot, aes(x = factor(cyl))) + 
    geom_boxplot(aes(lower = q1, upper = q3, middle = med, ymin = min, ymax = max), stat = "identity") + 
    geom_text(aes(y = max,label = lab),vjust = 0) 

enter image description here

我才意識到我錯誤地使用了中位數當你問的意思,但你可以明顯地使用任何功能的middle審美請你。

+0

只是美麗! – user1442363 2013-03-27 14:37:51

+0

對不起,最後一個問題。是否有可能改變組的順序?不幸的是,我對數字或數據驅動的訂單不感興趣。我能想到的唯一方法是重新編碼組變量。您的幫助將非常感謝!再次感謝! – user1442363 2013-03-27 14:41:49

+1

@ user1442363是的[你是對的](http://stackoverflow.com/q/6867393/324364)。 – joran 2013-03-27 14:43:52

相關問題