在修改的ggplot-boxplot中绘制异常值时stat_summary(fun.y)出错

时间:2016-02-08 16:48:15

标签: r ggplot2

我想绘制显示95百分位而不是IQR的箱线图,包括超过95%标准定义的异常值。 此代码工作正常,并基于此处和网络上的几个答案:

f1 <- function(x) {
  subset(x, x < quantile(x, probs=0.025)) # only for low outliers
}

f2 <- function(x) {
  r <- quantile(x, probs = c(0.025, 0.25, 0.5, 0.75, 0.975))
  names(r) <- c("ymin", "lower", "middle", "upper", "ymax")
  r
}
d <- data.frame(x=gl(2,50), y=rnorm(100))

library(ggplot2)

p0 <- ggplot(d, aes(x,y)) +
        stat_summary(fun.data = f2, geom="boxplot") + coord_flip()

p1 <- p0 + stat_summary(fun.y = f1, geom="point")

d的结构是:

'data.frame':   100 obs. of  2 variables:
 $ x: Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 1 1 ...
 $ y: num  2.275 0.659 -0.821 -0.129 1.997 ...

现在,来看我的真实数据,结构基本相同:

str(test)
'data.frame':   11830917 obs. of  2 variables:
 $ x: Ord.factor w/ 34 levels "SG26"<"SG22"<..: 18 18 18 18 18 18 18 18 18 18 ...
 $ y: num  84.6 84.1 93.3 84 93.2 94.3 83.3 92.5 94.5 98.8 ...

现在,如果我应用相同的绘图命令,我得到:

    p0 <- ggplot(test, aes(x,y)) + stat_summary(fun.data = f2, geom="boxplot") +  coord_flip() 
    p1 <- p0 + stat_summary(fun.y = f1, geom="point")
    p1

Warning message:
Computation failed in `stat_summary()`:
Argumente implizieren unterschiedliche Anzahl Zeilen: 1, 0 

最后一行是“参数暗示不同行数1 0”的德语版本。 p0生产得很好。

两个数据集之间可能有什么区别?

1 个答案:

答案 0 :(得分:1)

由@Heroka和@bdemarest确定的问题是由只有一个值的一个因素水平产生的。

我的解决方法是跳过这些因素:

 /*< log record format >*/
    keywords::format =
    (
        expr::stream
        //<< std::hex   //To print the LineID in Hexadecimal format
        << std::setw(8) << std::setfill('0') 
        << expr::attr< unsigned int >("LineID")
        << "\t"
        << expr::format_date_time<boost::posix_time::ptime>("TimeStamp","%H:%M:%S.%f")
        << "\t: <" << logging::trivial::severity
        << "> \t" << expr::smessage
    )

由于未知原因,问题一直存在,直到每个因子级别至少有7个值。