繁体   English   中英

仅在ggplot2中重叠时闪避或抖动

[英]dodge or jitter only at overlaps in ggplot2

我想在ggplot2中创建一个绘图,其中的值与中心对齐但是在重叠处躲闪,就像这个(在graphpad棱镜中完成)

在graphpad prism中的情节

我在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))

在R中用ggplot2绘图

如何保持点与中心对齐并仅在ggplot2的重叠处躲闪?

我的解决方案是:

  1. 将数据划分为重叠和非重叠点。 这可以通过计算先前点之间的差异来完成。 如果它小于某个阈值,那么该点与某个点重叠,因此应该应用一些zitter,同时绘制该点。 否则,该点就这样绘制。
  2. 使用geom_point分别绘制两个数据。

下面是使用上述逻辑的代码。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM