5

geom_jittered でレンダリングされたポイントにテキストを追加してラベルを付けるにはどうすればよいですか? ジッターされたドットの座標がわからないため、 geom_text は機能しません。geom_text に渡すことができるように、ジッタリングされたポイントの位置をキャプチャしていただけますか?

私の実際の使用法は、geom_jitter でボックスプロットをプロットしてデータ分布を表示することです。外れ値のドットまたは特定の条件に一致するドットにラベルを付けたいと思います (たとえば、プロットの色に使用される値の下位 10%) )。

1 つの解決策は、ジッター プロットの xy 位置をキャプチャし、後で別のレイヤーで使用することです。それは可能ですか?

[アップデート]

Joranの回答から、解決策は、ベースパッケージのジッター関数を使用してジッター値を計算し、それらをデータフレームに追加してgeom_pointで使用することです。フィルタリングのために、彼は ddply を使用してフィルター列 (論理ベクトル) を作成し、それを使用して geom_text のデータをサブセット化しました。

彼は最小限のデータセットを求めました。私はちょうど彼の例を変更しました (ラベル列の一意の識別子)

dat <- data.frame(x=rep(letters[1:3],times=100),y=runif(300),
                      lab=paste('id_',1:300,sep='')) 

これは、私のデータを使用した Joran の例の結果であり、ID の表示を最低の 1% に下げています。 1% 未満の値にジッター ドットとラベルを付けた箱ひげ図

そして、これは別の変数によって色を持ち、この変数のいくつかの値 (各グループの最低 1%) を表示するようにコードを変更したものです。

library("ggplot2")
#Create some example data
dat <- data.frame(x=rep(letters[1:3],times=100),y=runif(300),
                          lab=paste('id_',1:300,sep=''),quality= rnorm(300))

#Create a copy of the data and a jittered version of the x variable
datJit <- dat
datJit$xj <- jitter(as.numeric(factor(dat$x)))

#Create an indicator variable that picks out those
# obs that are in lowest 1% by x
datJit <- ddply(datJit,.(x),.fun=function(g){
               g$grp <- g$y <= quantile(g$y,0.01);
               g$top_q <- g$qual <= quantile(g$qual,0.01);
               g})

#Create a boxplot, overlay the jittered points and
# label the bottom 1% points
ggplot(dat,aes(x=x,y=y)) +
  geom_boxplot() +
  geom_point(data=datJit,aes(x=xj,colour=quality)) +
  geom_text(data=subset(datJit,grp),aes(x=xj,label=lab)) +
  geom_text(data=subset(datJit,top_q),aes(x=xj,label=sprintf("%0.2f",quality)))

1% 未満の値にジッター ドットとラベルを付けた箱ひげ図

4

2 に答える 2

8

あなたの質問は完全に明確ではありません。たとえば、ある時点でラベリングポイントについて言及していますが、カラーリングポイントについても言及しているため、どちらが本当の意味なのか、あるいは両方なのかわかりません。再現可能な例は非常に役立ちます。しかし、私の側で少し推測を使用して、次のコードはあなたが説明していると私が思うことを行います:

#Create some example data
dat <- data.frame(x=rep(letters[1:3],times=100),y=runif(300),
        lab=rep('label',300))

#Create a copy of the data and a jittered version of the x variable
datJit <- dat
datJit$xj <- jitter(as.numeric(factor(dat$x)))

#Create an indicator variable that picks out those 
# obs that are in lowest 10% by x
datJit <- ddply(datJit,.(x),.fun=function(g){
             g$grp <- g$y <= quantile(g$y,0.1); g})

#Create a boxplot, overlay the jittered points and 
# label the bottom 10% points
ggplot(dat,aes(x=x,y=y)) + 
    geom_boxplot() + 
    geom_point(data=datJit,aes(x=xj)) + 
    geom_text(data=subset(datJit,grp),aes(x=xj,label=lab))        
于 2011-07-01T18:18:19.453 に答える
1

Joran のすばらしい解決策への追加: facet_wrap() を使用してファセット プロットで使用しようとしたときに、x 軸の配置で問題が発生しました。問題は、ggplot2 がすべてのファセットの x 値として 1 を使用することです。解決策は、ジッターされた 1 のベクトルを作成することです。

datJit$xj <- jitter(rep(1,length(dat$x)),amount=0.1)
于 2015-12-13T20:42:54.153 に答える