0

我正在使用 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

4

0 回答 0