2012-03-23 46 views
2

我的问题如下:在R包ggplot2 - 盒图 - 如何标记晶须末端的两个点(上下两个点)例如带有一个“x”标记,以便在盒须的最上端有一个盒状图和两个额外的“x”标记,另一个标记将位于下须的下端。标记ggplot2中每个boxplot中两个晶须的末端R统计

我寻觅了很多互联网的答案,但无法找到。我只能使用stat_summary和平均函数数据在boxplot上添加“x”标记。

如何做其他两个点?

要在同一页上,请使用mtcars数据库R和使mpgboxplot为y轴和cyl为x轴。余将根据数据框mtcars结束3个箱柜。

据于R

The upper end defined as Q3+1.5*IQR 
The lower end defined as Q1-1.5*IQR 
Note: IQR = Q3 - Q1 
+0

如果你显示你所做的事情,你更有可能得到答案。发表你的例子,用mtcars创建一个x的意思。 (一旦你这样做了,你可能会意识到你可以在你的数据集的'min'和'max'处绘制一个x。) – Andrie 2012-03-23 17:48:56

回答

2

你只需要计算箱线图的终点,并添加它们,使用stat_summary。例如

##Load the library 
library(ggplot2) 
data(mpg) 

##Create a function to calculate the points 
##Probably a built-in function that does this 
get_tails = function(x) { 
    q1 = quantile(x)[2] 
    q3 = quantile(x)[4] 
    iqr = q3 -q1 
    upper = q3+1.5*iqr 
    lower = q1-1.5*iqr 
    if(length(x) == 1){return(x)} # will deal with abnormal marks at the periphery of the plot if there is one value only 
    ##Trim upper and lower 
    up = max(x[x < upper]) 
    lo = min(x[x > lower]) 
    return(c(lo, up)) 
} 

使用stat_summary将其添加到您的情节:

ggplot(mpg, aes(x=drv,y=hwy)) + geom_boxplot() + 
    stat_summary(geom="point", fun.y= get_tails, colour="Red") 

另外,你的终点的定义是不太正确的。有关更多详情,请参阅我的answer另一个问题。

+0

非常感谢我正在寻找的东西,但是你能不能请我做另一个青睐。如何将这个很好的书面功能输入到Deducer软件包中。在几何元素下有点,然后可以选择总结,然后选择自定义,这里我需要你的帮助来输入函数get_tails。在此先感谢 – doctorate 2012-03-23 19:59:24

+0

对不起,我从来没有使用推定器包 – csgillespie 2012-03-25 09:44:05

+0

嗨csgillespie,我已经试过了功能get_tails和工作正常,但在这个函数中一个缺陷:如果真的发生了,我在一个变量只有一个数据值和我想将它表示为boxplot,它应该表现为一条线,即所有东西,但是两个尾巴的标记都将显示在绘图外围的boxplot的两端(boxplot在这种情况下将是一条小线,因为一个价值是存在的),那么如何在函数中解决这个问题,以防止它出现在情节中,如果有这种情况或者你有其他建议/解决方案? – doctorate 2012-03-28 23:46:49