gpt4 book ai didi

r - 将文本添加到与条件匹配的ggplot geom_jitter点

转载 作者:行者123 更新时间:2023-12-01 18:31:38 24 4
gpt4 key购买 nike

如何向使用 geom_jittered 渲染的点添加文本来标记它们? geom_text 将不起作用,因为我不知道抖动点的坐标。您能否捕获抖动点的位置,以便我可以传递给 geom_text?

我的实际用途是绘制一个带有 geom_jitter 的箱线图来显示数据分布,我想标记离群值点或符合特定条件的点(例如用于以下值的 10%)给图上色)。

一种解决方案是捕获抖动图的 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 示例使用我的数据并将 ids 的显示降低到最低 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

最佳答案

您的问题不完全清楚;例如,您在某一时刻提到了标签点,但也提到了着色点,所以我不确定您真正的意思是哪一个,或者两者都有。一个可重现的例子会非常有帮助。但我进行了一些猜测,以下代码完成了我认为您所描述的操作:

#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))

关于r - 将文本添加到与条件匹配的ggplot geom_jitter点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6551147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com