2017-01-04 37 views
0

我想製作一個boxplot的寬度與他們的數字大小成正比的boxplot。我已經爲分類X變量計算了彙總統計信息:(n,p5,p25,p50,p75,p95)。我已經做了一些研究,並嘗試使用「n」變量作爲一組權重,以及在geom_boxplot中使用「varwidth = TRUE」參數。這些都不適合我。當您已經計算了數據的彙總統計信息時,是否有辦法添加比例寬度?以下是我的代碼的示例:Boxplot與比例重量,其中彙總統計已定義爲分類變量

src <- c("a", "b", "c") 
n <- c(10, 20, 30) 
p5 <- c(-10, -20, -15) 
p25 <- c(-5, -10, -10) 
p50 <- c(5, 0, 5) 
p75 <- c(10, 5, 15) 
p95 <- c(15, 20, 30) 

df <- data.frame(src, n, p5, p25, p50, p75, p95) 

MonthsSrc <- ggplot(data=df, aes(x=factor(src), ymin=p5, lower=p25, middle=p50, upper=p75, ymax=p95)) + 
    geom_boxplot(stat="identity", fill="white", colour="black", varwidth=TRUE) + 
    scale_y_continuous(name="Value(%)", limits=c(-30,30), breaks=c(-30,-15,0,15,30), labels=c(-30,-15,0,15,30)) + 
    theme_classic() + 
    theme(axis.line.x=element_line(color="black",size=0.5), 
     axis.line.y=element_line(color="black",size=0.5)) 

感謝您的幫助!

+0

這個問題可以改進。請將鼠標懸停在R標籤上 - 它要求提供一個最小可重現的示例。 [這是一個指南](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example#answer-5963610);也看R幫助文件(例如'?geom_boxplot',_examples_部分) – lukeA

+0

我已經添加了一個示例數據集。 –

回答

0

這樣做的一種方法是使用varwidth=T,這意味着寬度與sqrt(n)成正比。由於sqrt(n)* sqrt(n)= n,我們可以使用weight美學將它帶到nweight=sqrt(n)

例與ggplot2mpg數據集:

library(dplyr) 
library(ggplot2) 
mpg%>% 
    group_by(manufacturer)%>% 
    mutate(n=n())%>% 
    ggplot(aes(x=manufacturer,y=displ))+ 
    geom_boxplot(aes(weight=sqrt(n)),varwidth = T) 

有可能是一個更好的解決方案。