[英]dodge or jitter only at overlaps in ggplot2
我想在ggplot2中创建一个绘图,其中的值与中心对齐但是在重叠处躲闪,就像这个(在graphpad棱镜中完成)
我在ggplot2中用抖动做什么就像这样
df<-data.frame(response=c(-0.3502294,0.4207441,0.1001638,-0.2401336,-0.2604142,0.4574286,
0.755964,0.9241669,0.8212376,2.037581,0.6440635,0.2714898,1.433149,0.4627742,
0.5639637,0.1610219,0.1516505,-1.322015,-0.2134711,0.8554756,0.400872,1.344739,
0.3743637,0.6329151,0.1467015,0.6313575,0.3989693,0.1940468,-0.06594919,-0.1951204),
group=c(rep("A",10),rep("B",10),rep("C",10)))
set.seed(1234)
ggplot(df,aes(group,response,fill=group))+
geom_point(size=5,pch=21,position=position_jitter(w=.2))+
scale_y_continuous(limits=c(-2,3))
如何保持点与中心对齐并仅在ggplot2的重叠处躲闪?
我的解决方案是:
下面是使用上述逻辑的代码。
library(data.table)
threshold <- 0.1
df<-data.frame(response=c(-0.3502294,0.4207441,0.1001638,-0.2401336,-0.2604142,0.4574286,
0.755964,0.9241669,0.8212376,2.037581,0.6440635,0.2714898,1.433149,0.4627742,
0.5639637,0.1610219,0.1516505,-1.322015,-0.2134711,0.8554756,0.400872,1.344739,
0.3743637,0.6329151,0.1467015,0.6313575,0.3989693,0.1940468,-0.06594919,-0.1951204),
group=c(rep("A",10),rep("B",10),rep("C",10)))
df1 <- data.table(df[order(df$group, df$response),])
df1[, diffFromLast:=response - shift(response, n=1, type="lag"), by=group]
nonZitterPoints <- df1[ is.na(diffFromLast) | (diffFromLast > threshold),]
zitterPoints <- df1[ which(diffFromLast < threshold),]
g1 <- ggplot()+
geom_point(data=nonZitterPoints,aes(group,response,fill=group), size=5,pch=21)+
scale_y_continuous(limits=c(-2,3))
g1
g2 <- g1 + geom_point(data=zitterPoints,aes(group,response,fill=group), size=5,pch=21, position=position_jitter(w=.2))
g2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.