我正在使用 ggplot2 绘制两组不同的数据。我有太多的点,所以当我标记它们时,它们会重叠。这导致我需要将 ggrepel 与 ggplot2 一起使用。我需要使这些组的大小和颜色不同,这是我能够实现的,但是我无法抑制一组从点到标签的线段(一组完全没有点)。用我的代码可能更容易理解:
labels=c("a1","a2","a3","a4","a5","b1","b2","b3","b4","b5")
x<-c(4.7,4.6,-11.0,6.2,11.4,6.1,6.1, -9.9,-9.7,-0.3)
y<-c(13.7,13.6,7.6,9.5,-5.6,10.6,10.6,5.8,9.0,0.1)
mydata<-data.frame(labels,x,y)
mydata$color <- "firebrick"
for(i in 1:5)mydata[i,4]="darkgray"
mydata$segment <- "firebrick"
for(i in 1:5)mydata[i,5]=NA
mydata$size <- 8
for(i in 1:5)mydata[i,6]=5
这导致数据框:
> mydata
labels x y color segment size
1 a1 4.7 13.7 darkgray NA 5
2 a2 4.6 13.6 darkgray NA 5
3 a3 -11.0 7.6 darkgray NA 5
4 a4 6.2 9.5 darkgray NA 5
5 a5 11.4 -5.6 darkgray NA 5
6 b1 6.1 10.6 firebrick firebrick 8
7 b2 6.1 10.6 firebrick firebrick 8
8 b3 -9.9 5.8 firebrick firebrick 8
9 b4 -9.7 9.0 firebrick firebrick 8
10 b5 -0.3 0.1 firebrick firebrick 8
下面的代码绘制图表:
ggplot(data=mydata, aes(x=x, y=y)) + geom_point(data=mydata[6:10,],color="firebrick") +
geom_text_repel(data=mydata,aes(label=labels),color=mydata$color,show.legend=FALSE,
size=mydata$size,
segment.color=mydata$segment) +
geom_hline(yintercept=0, color="black", size=0.5)+geom_vline(xintercept=0,color="black",size=0.5)+
theme(panel.background=element_rect(color="black",fill="white"),panel.grid.major.y=element_blank(),panel.grid.minor.y=element_blank(),
panel.grid.major.x=element_blank(),panel.grid.minor.x=element_blank())
很可能有一种更简单的方法可以做到这一点。我需要红色标签 b1-b5 的线条,但不需要 a1-a5。结果图在这里
与往常一样,非常感谢任何想法!如果我找到解决方案,我会更新。
编辑:我需要从这张图中:
- a1-a5 更小,灰色,没有点(只有标签),也没有连接标签到点的线(这些都是用上面的代码实现的)
- b1-b5 更大,红色,有点和标签,并且有连接点到标签的线(我似乎无法得到连接到点的线段,同时为 a1-a5 抑制它们)
谢谢,J