How to get directed edges to stop at the node border, regardless node size?

I don't think this has been addressed here yet. New to R and did my best with the reprex below.

I have a directed network with nodes sized by degree and would like the arrows on the directed edges to contact the nodes, regardless of their size.

I have fiddled with start_cap and end_cap in geom_edge_link() but that adjusts things for all of the nodes in a uniform fashion. I also thought I might be able to balance that with scale_size_continuous(), but that seems to get me nowhere in a hurry. I also came across this, but I'm wondering (hoping?) if there is a solution "within" ggraph.

library(tidyverse)
library(tidygraph)
#> 
#> Attaching package: 'tidygraph'
#> The following object is masked from 'package:stats':
#> 
#>     filter
library(ggraph)

# Creating a data frame
df <- rbind(c(0,1,1,0,0,1,1,0,1),
            c(0,0,1,1,0,0,1,1,0),
            c(0,1,0,0,0,0,1,0,0),
            c(0,0,0,0,0,1,0,1,0),
            c(0,0,1,0,0,1,0,1,0),
            c(0,0,1,0,0,1,1,1,0),
            c(1,0,1,1,0,1,0,1,0),
            c(0,1,0,0,0,0,0,0,1),
            c(0,1,0,0,0,1,1,0,1))
df <- as_tbl_graph(df)

df %>% 
  mutate(centrality = (centrality_degree(mode = "out"))) %>% 
  ggraph(layout = 'kk') + 
  theme_graph()+ #appears that this has to go first
  scale_size_continuous(range = c(5, 10))+
  geom_node_point(aes(size=centrality))+
  geom_edge_link(arrow = arrow(angle = 10, length = unit(3, 'mm'),
                               type="closed"),
                 start_cap = circle(5, 'mm'),
                 end_cap = circle(5, 'mm'))+ 
  theme(legend.position = "none")

Created on 2020-07-21 by the reprex package (v0.3.0)

This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.