答读者问:R语言ggplot2散点图实现用箭头两两配对

2021-07-30 10:40:26 浏览数 (1)

这个是公众号读者留言问到的问题,今天的推文介绍一下我想到的实现办法

首先是准备示例数据

处理前的示例数据如下总共四列

  • x,y是散点的位置坐标
  • node是给散点起得名字
  • group表示分组

处理后的示例数据也是一样的

还有一个配对分组文件

接下来先做散点图
代码语言:javascript复制
library(ggplot2)
library(readxl)
library(dplyr)
library(ggstar)
df1<-read_excel("practice/example.xlsx",sheet = "Sheet1")
df2<-read_excel("practice/example.xlsx",sheet = "Sheet2")
df1
df2
df<-rbind(df1,df2)
df

ggplot() 
  geom_star(data=df,aes(x=x,y=y,
                        starshape=group,
                        fill=group),
            size=5) 
  theme_bw()
接下来是构造画箭头的数据
代码语言:javascript复制
df3<-read_excel("practice/example.xlsx",sheet = "Sheet3")

df3

merge(df,df3,by.x = "node",by.y = "start") %>% 
  select(x,y) %>% 
  rename("xstart"="x",
         "ystart"="y") -> df1.1
merge(df,df3,by.x = "node",by.y = "end" )%>% 
  select(x,y) %>% 
  rename("xend"="x",
         "yend"="y") -> df2.1
df2.1
df1.1
df.1<-cbind(df1.1,df2.1)
最终的结果图
代码语言:javascript复制
ggplot() 
  geom_star(data=df,aes(x=x,y=y,
                        starshape=group,
                        fill=group),
            size=5) 
  theme_bw() 
  geom_segment(data=df.1,aes(x=xstart 0.05,y=ystart,
                             xend=xend-0.05,yend=yend),
               arrow = arrow(length=unit(0.5, "cm")),
               lineend = "round",
               linejoin = "round",
               size=3)

0 人点赞