R:使用;识别;在箱线图中查找列名的步骤

R:使用;识别;在箱线图中查找列名的步骤,r,plot,boxplot,R,Plot,Boxplot,在R中,我从一个大约有150列的data.frame中绘制了一个相当大的箱线图。我知道有些“异常”列的分布与数据集的其余部分差异太大,我想准确地确定哪些列 毫不奇怪,没有足够的空间放置标签,即使有,也可能不方便手工检查。所以我想我可以用R的 识别功能以定位有问题的列。然而,这样一个函数需要x和y坐标,到目前为止,我无法让它工作 我试过了 boxplot(dd.noctr$TGS, outline=F) identify(xy.coords(dd.noctr$TGS)$x, y=xy.coords

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

毫不奇怪,没有足够的空间放置标签,即使有,也可能不方便手工检查。所以我想我可以用R的

识别
功能以定位有问题的列。然而,这样一个函数需要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
这意味着没有确定任何一点


是否有其他解决方案来标识列名(而不是单点)?

此解决方案似乎有点笨重,因此可能有更好的解决方案

  • 使用三列设置一些示例数据:

    TGS = data.frame(A = rnorm(100), B = rnorm(100), C=rnorm(100))
    
  • 下一步绘制箱线图

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

    identify(x=rep(1:ncol(TGS), each=nrow(TGS)), 
         y=as.vector(unlist(TGS)), 
         label=rep(colnames(TGS), each=nrow(TGS)))
    
    标签是列名。仅当您单击箱线图中心附近时,此功能才起作用


  • 如果要获得异常值列表,可以使用箱线图的“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
    

    是的,就是这样。我想重点是箱线图的x坐标只有1:(箱线图的数量)
    xy.coords
    无法生成正确的坐标,因此
    identify
    无法找到附近的点。您可以使用
    a=boxplot(TGS)
    然后
    identify(x=1:ncol(TGS),y=a$stats[3,],labels=a$names,n=1)
    作为较短的替代方法
    $stats[3,]
    是每个箱线图的中值向量。