【问题标题】:R: use "identify" to find the column names in a boxplotR:使用“识别”在箱线图中查找列名
【发布时间】:2013-10-01 08:28:54
【问题描述】:

在 R 中,我从大约 150 列的 data.frame 中绘制了一个相当大的箱线图。我知道有一些“异常”列的分布与数据集的其余部分相差太大,我想准确地确定哪些列。

毫不奇怪,没有足够的空间放置标签,即使有,手动检查也可能不方便。所以我想我可以使用 R 的 identify 函数来定位有问题的列。然而,这样的函数需要 x 和 y 坐标,到目前为止我无法让它工作。

我试过了

boxplot(dd.noctr$TGS, outline=F)
identify(xy.coords(dd.noctr$TGS)$x, y=xy.coords(dd.noctr$TGS)$y)

其中dd.noctr$TGS 是我的数据(矩阵或data.frame),只是为了得到错误

warning: no point within 0.25 inches

表示没有发现任何点。

是否有替代解决方案来识别列名(不是单点)?

【问题讨论】:

    标签: r plot boxplot


    【解决方案1】:

    这个解决方案似乎有点笨拙,所以可能有更好的解决方案。

    1. 设置一些包含三列的示例数据:

      TGS = data.frame(A = rnorm(100), B = rnorm(100), C=rnorm(100))
      
    2. 接下来绘制箱线图

      boxplot(TGS, outline=F)
      
    3. 现在我们构造identity 函数。

      identify(x=rep(1:ncol(TGS), each=nrow(TGS)), 
           y=as.vector(unlist(TGS)), 
           label=rep(colnames(TGS), each=nrow(TGS)))
      

      标签是列名。此功能仅在您单击箱线图中心附近时才有效。

    【讨论】:

    • 是的,就是这样。我认为关键是箱线图的 x 坐标只是 1:(箱线图的数量)。 xy.coords 没有生成正确的坐标,因此identify 找不到附近的点。
    • 您可以使用a = boxplot(TGS),然后使用identify(x = 1:ncol(TGS), y = a$stats[3,], labels = a$names, n = 1) 作为更短的替代方案。 $stats[3,] 是每个箱线图的中值向量。
    【解决方案2】:

    如果要获取异常值列表,可以使用箱线图的“out”组件。

    示例: 创建一个数据框:带有一些平均值为 20 的随机值,并添加一些异常值。此代码将显示异常值。

     df1 = data.frame(A = c(rnorm(15,20,3),7,8,35,32))   #15 rnorm and 4 extreme values
     bplot=boxplot(df1)
     bplot$out
    

    【讨论】:

      猜你喜欢
      • 2012-06-23
      • 1970-01-01
      • 1970-01-01
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多