I am trying to create a hierarchical graph (like a tree structure but ideally in a circle) that reflects a 3 way connection that goes from the individual sample to species to what label it falls under. Essentially emphasizing that all of these are different species but they fall under the same label. However when I try to create my graph my labels are overlapping and you cant see what is each part, everything gets super condensed. This doesn't happen when I use a smaller sample amount like 20 and less species, but I have a large data set of 121 which leads to overlap. How can I fix the clustering with a set this large? For aesthetics I would like it to look like a circle, but I even tried not doing it as one and it still overlapped... Example data:
Sample Species Label
L1 Shark Seafood
L2 Tuna Seafood
L3 Shark Seafood
L4 Shrimp Seafood
L5 Crab Seafood
L6 Squid Seafood
L7 Shrimp Seafood
L8 Shark Seafood
L9 Shark Seafood
L10 Crab Seafood
L11 Tuna Seafood
L12 Shrimp Seafood
L13 Crab Seafood
L14 Crab Seafood
L15 Shark Seafood
L16 Tuna Seafood
L17 Squid Seafood
L18 Shark Seafood
L19 Squid Seafood
L20 Shrimp Seafood
L21 Shark Seafood
L22 Tuna Seafood
L23 Shark Seafood
L24 Shrimp Seafood
L25 Crab Seafood
L26 Tuna Seafood
L27 Shrimp Seafood
L28 Shark Seafood
L29 Shark Seafood
L30 Crab Seafood
L31 Tuna Seafood
L32 Shrimp Seafood
L33 Crab Seafood
L34 Crab Seafood
L35 Lobster Seafood
L36 Tuna Seafood
L37 Tuna Seafood
L38 Shark Seafood
L39 Shark Seafood
L40 Shrimp Seafood
L41 Shark Seafood
L42 Tuna Seafood
L43 Shark Seafood
L44 Shrimp Seafood
L45 Crab Seafood
L46 Tuna Seafood
L47 Shrimp Seafood
L48 Shark Seafood
L49 Shark Seafood
L50 Crab Seafood
L51 Tuna Seafood
L52 Shrimp Seafood
L53 Crab Seafood
L54 Crab Seafood
L55 Shark Seafood
L56 Cod Seafood
L57 Tuna Seafood
L58 Shark Seafood
L59 Shark Seafood
L60 Shrimp Seafood
L61 Shark Seafood
L62 Cod Seafood
L63 Shark Seafood
L64 Shrimp Seafood
L65 Crab Seafood
L66 Tuna Seafood
L67 Shrimp Seafood
L68 Shark Seafood
L69 Shark Seafood
L70 Crab Seafood
L71 Tuna Seafood
L72 Cod Seafood
L73 Lobster Seafood
L74 Crab Seafood
L75 Shark Seafood
L76 Tuna Seafood
L77 Lobster Seafood
L78 Shark Seafood
L79 Shark Seafood
L80 Shrimp Seafood
L81 Shark Seafood
L82 Lobster Seafood
L83 Shark Seafood
L84 Shrimp Seafood
L85 Salmon Seafood
L86 Tuna Seafood
L87 Salmon Seafood
L88 Shark Seafood
L89 Blowfish Seafood
L90 Flounder Seafood
L91 Tuna Seafood
L92 Shrimp Seafood
L93 Crab Seafood
L94 Lobster Seafood
L95 Shark Seafood
L96 Tuna Seafood
L97 Blowfish Seafood
L98 Shark Seafood
L99 Shark Seafood
L100 Flounder Seafood
L101 Shark Seafood
L102 Tuna Seafood
L103 Shark Seafood
L104 Salmon Seafood
L105 Crab Seafood
L106 Salmon Seafood
L107 Shrimp Seafood
L108 Shark Seafood
L109 Shark Seafood
L110 Crab Seafood
L111 Tuna Seafood
L112 Shrimp Seafood
L113 Crab Seafood
L114 Flounder Seafood
L115 Shark Seafood
L116 Tuna Seafood
L117 Tuna Seafood
L118 Shark Seafood
L119 Shark Seafood
L120 Shrimp Seafood
L121 Shrimp Seafood
The code I have so far is:
library(tidygraph)
library(ggraph)
library(extrafont)
df1 <- Example[2:1]
df1$Sample <- paste(df1$Species, df1$Sample)
df2 <- Example[3:2]
names(df2) <- names(df1)
as_tbl_graph(rbind(df1, df2)) %>%
activate(nodes)%>%
mutate(group = ifelse(grepl(' ', name), sub(' .*$', '', name), name),
name = ifelse(grepl(' ', name), sub('^.* ', '', name), name)) %>%
ggraph(layout = 'igraph', algorithm = 'tree', circular = TRUE) +
geom_edge_arc(aes(color = factor(from)), width = 2, alpha = 0.3) +
geom_node_circle(aes(r = nchar(name)/45, fill = group), color = NA) +
geom_node_text(aes(label = name), fontface = 2,
size = 6, color = "gray30") +
theme_graph() +
coord_equal() +
scale_edge_color_brewer(palette = 'Pastel2') +
scale_fill_brewer(palette = 'Pastel2',
limits = c('Shark', 'Tuna', 'Shrimp', 'Crab', 'Seafood', 'Cod', 'Blowfish', 'Lobster', 'Squid', 'Flounder', 'Salmon')) +
theme(legend.position = 'none')
What I end up getting with this code is this:
What I would like to have but with my larger data set:
Any tips/insight would be super helpful!