调整ggplot中特定文本标签以避免重叠

5

给定一个虚拟数据集:

V1<-c(1,10,30,22,22,20)
V2<-c(4,17,4,33,33.2,15)
V3<-c(20,20,15,34,33,30)
V4<-c("A","A","A","B","B","B")
DF<-data.frame(V1,V2,V3,V4)

如果我要绘制一个气泡图,就像这样:

symbols(DF$V1,DF$V2,circles=V3,inches=0.35,fg="darkblue",bg="red")
text(DF$V1,DF$V2,V4,cex=0.5)

我的第四个和第五个标签文本有重叠。使用以下代码,我可以通过调整特定的点来解决这个问题。

text(DF$V1,DF$V2+c( 0, 0, 0, 1, -1,0 ),V4,cex=0.5)

这个功能运行良好,但我想在ggplot中使用。如果我简单地使用ggplot:

ggplot(DF,aes(x=V1,y=V2,size=V3,label=V4),legend=FALSE)+geom_point(color='darkblue',fill="red", shape=21)+theme_bw()+geom_text(size=5)

我遇到了同样的重叠问题,但不知道如何调整各个点以避免重叠。我尝试使用"thigmophobe.labels",但那会调整所有的点。我希望只是略微调整重叠的点使它们易于阅读。
3个回答

5
如果被重叠的数据值不是很重要,一个快速而简单的解决方案是指定:
+ geom_text(size = 5, check_overlap = T)

这样,与先前文本重叠的文本将不会被绘制出来。


3

添加 position=position_jitter() 并调整 widthheight 参数。例如:

 + geom_text(size=5, position=position_jitter(width=1, height=2) )

我通常喜欢抖动,但在这种情况下,我试图保持我的点均匀分布,并且与气泡点相同方向,只调整重叠的点。 - Vinterwoo
为了精确控制,请在您的数据中创建一个额外的列,并根据需要调整点数。 - Ricardo Saporta

1
尝试使用directlabels包。它可能有你需要的东西。(具体来说,是在ggplot代码周围包裹direct.label函数。)

1
directlabels 是这个名称。 - Zhubarb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接