这个是公众号读者留言问到的问题,今天的推文介绍一下我想到的实现办法
首先是准备示例数据
处理前的示例数据如下总共四列
- 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)