我喜欢在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的重叠处闪避?
答案 0 :(得分:1)
我的解决方案是:
以下是使用上述逻辑的代码。
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