Толщина легендарной линии на графике - PullRequest
2 голосов
/ 07 июня 2019

При использовании ggraph есть ли способ сгущать линии легенды для цвета кромки? Я пытаюсь переопределить, но безрезультатно. Вот пример:

library(tidyverse)
library(igraph)
library(ggraph)

set.seed(20190607)

#create dummy data
Nodes <- tibble(source = sample(letters, 8))
Edges <- Nodes %>% 
  mutate(target = source) %>% 
  expand.grid() %>% 
  #assign a random weight & color
  mutate(weight = runif(nrow(.)),
         color = sample(LETTERS[1:5], nrow(.), replace = TRUE)) %>% 
  #limit to a subset of all combinations
  filter(target != source,
         weight > 0.7)


#make the plot
Edges %>% 
  graph_from_data_frame(vertices = Nodes) %>% 
  ggraph(layout = "kk") + 
  #link width and color are dynamic
  geom_edge_link(alpha = 0.5, aes(width = weight, color = color)) + 
  geom_node_point(size = 10) + 
  theme_graph() + 
  #don't need a legend for edge width, but the color override doesn't work
  guides(edge_width = FALSE,
         edge_color = guide_legend(override.aes = list(size = 2))) 

Can barely see the legend lines

Мой предпочтительный вывод будет выглядеть примерно так:

enter image description here

1 Ответ

1 голос
/ 07 июня 2019

Я думаю, что вы действительно хотите настроить width эстетику, а не size, так что это одно маленькое исправление.

Но сложная часть (по крайней мере для меня) заключается в том, что ggraph расширяетсяэстетические имена автоматически, например width >>> edge_width, поэтому вам нужно использовать формат edge_x при попытке переопределить эстетику в guide_legend().

Таким образом, вы получите что-то вроде этого:

Edges %>% 
  graph_from_data_frame(vertices = Nodes) %>% 
  ggraph(layout = "kk") + 
  geom_edge_link(alpha = 0.5, aes(width = weight, edge_color = color)) + 
  geom_node_point(size = 10) + 
  theme_graph() + 
  guides(edge_color = guide_legend(override.aes = list(edge_width = 5)),
         edge_width = F) 

enter image description here

...