5

行列の各列を箱ひげ図としてプロットし、各箱ひげ図の外れ値に、行列に属する行名としてラベルを付けたいと思います。例を使用するには:

vv=matrix(c(1,2,3,4,8,15,30),nrow=7,ncol=4,byrow=F)
rownames(vv)=c("one","two","three","four","five","six","seven")
boxplot(vv)

各プロットの外れ値 (この場合は 30) にそれが属する行名としてラベルを付けたいので、この場合 30 は行 7 に属します。これを行う簡単な方法はありますか? これと同様の質問を見たことがありますが、希望どおりに機能したものはありませんでした。

4

6 に答える 6

8

簡単な方法があります。次の行の Boxplot の b は大文字であることに注意してください。

library(car)

Boxplot(y ~ x, id.method="y")
于 2014-10-22T05:11:55.710 に答える
5

あるいは、外れ値にラベルを付ける {car} パッケージの "Boxplot" 関数を使用することもできます。

次のリンクを参照してください: https://CRAN.R-project.org/package=car

于 2014-02-28T17:40:29.430 に答える
4

与えられた例では、それらはすべて同じ行であるため、少し退屈です。しかし、ここにコードがあります:

bxpdat <- boxplot(vv)
text(bxpdat$group,                                              # the x locations 
     bxpdat$out,                                                # the y values
     rownames(vv)[which(vv == bxpdat$out, arr.ind=TRUE)[, 1]],  # the labels
     pos = 4)  

これは、結果の「アウト」リスト (つまり、異常値) と等しい値を持つ行名を選択しますboxplot。Boxplot は、 から値を呼び出して返しますboxplot.stats。を見てみましょう:

 str(bxpdat)
于 2013-03-03T00:42:11.537 に答える
4

@DWinのソリューションは、単一の箱ひげ図に対しては非常にうまく機能しますが、作成したデータセットのように、値が重複している場合は失敗します。

#Create data
set.seed(1)
basenums <- c(1,2,3,4,8,15,30)
vv=matrix(c(basenums, sample(basenums), 1-basenums, 
          c(0, 29, 30, 31, 32, 33, 60)),nrow=7,ncol=4,byrow=F)
dimnames(vv)=list(c("one","two","three","four","five","six","seven"), 1:4)

このデータセットでは、@DWin のソリューションは次のようになります。

ここに画像の説明を入力

4 番目の例では、最小値と最大値を同じ行にすることはできないため、これは誤りです。

このソリューションは巨大ですが (単純化できることを願っています)、効果的です。

#Reshape data
vv_dat <- as.data.frame(vv)
vv_dat$row <- row.names(vv_dat)
library(reshape2)
new_vv <- melt(vv_dat, id.vars="row")

#Get boxplot data
bxpdat <- as.data.frame(boxplot(value~variable, data=new_vv)[c("out", "group")])

#Get matches with boxplot data
text_guide <- do.call(rbind, apply(bxpdat, 1, 
    function(x) new_vv[new_vv$value==x[1]&new_vv$variable==x[2], ]))

#Add labels
with(text_guide, text(x=as.numeric(variable)+0.2, y=value, labels=row))

ここに画像の説明を入力

于 2013-03-03T01:26:02.687 に答える