добавление текста к точкам ggplot geom_jitter, которые соответствуют условию

Как я могу добавить текст к точкам, визуализированным с помощью geom_jittered, чтобы пометить их? geom_text не будет работать, потому что я не знаю координаты дрожащих точек. Не могли бы вы зафиксировать положение дрожащих точек, чтобы я мог перейти к geom_text?

Моим практическим использованием было бы построить коробчатую диаграмму с geom_jitter поверх нее, чтобы показать распределение данных, и я хотел бы пометить выбросы точками или теми которые соответствуют определенному условию (например, нижние 10% для значений, используемых для раскраски графиков).

Одним из решений может быть захват положений xy дрожащих графиков и их последующее использование в другом слое, возможно ли это?

[обновление]

Согласно ответу Джорана, решением было бы вычислить дрожащие значения с помощью функции дрожания из базового пакета, добавить их во фрейм данных и использовать их с 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 с моими данными и понижения отображения идентификаторов до самого низкого 1% boxplot with jitter dots and label in lower 1% values

И это модификация кода, чтобы цвета отображались другой переменной и отображались некоторые значения этой переменной (наименьший 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)))

boxplot with jitter dots and label in lower 1% values

5
задан M. Tibbits 4 July 2011 в 21:51
поделиться