Изменение формы, используемой в легенде в ggraph

Я пытаюсь изменить форму, используемую в легенде, с квадрата на круг с эстетикой заливки, но ни один из аргументов переопределения, похоже, не работает.

Если:

library(ggraph)
library(igraph)

g <- graph_from_data_frame(highschool)

ggraph(g) + 
  geom_edge_link(aes(colour = factor(year))) +
  geom_node_point() +
  geom_edge_density(aes(fill = factor(year))) 

Добавление:

guides(fill = guide_legend(override.aes = list(shape = c(21, 21)))) 

Производит это

[ Производит это [1]

Я не уверен, возможно ли добавить дополнительный слой в ggraph?

Всего 1 ответ


Вы можете обновить соответствующий ключ для Geom (см. Здесь ) - это потребовало небольшого количества проб и ошибок, так как обновление ключа заполнения / плотности с точкой означало, что вместо этого был нарисован ключ края / цвета (дополнительно ggraph:::GeomEdgeDensity не возвращается, поэтому обновить его, как показано на рисунке ниже, немного ggraph:::GeomEdgeDensity )

library(grid)

# save original key for later
old = GeomEdgeSegment$draw_key 

# update legend key to draw points
GeomEdgePath$draw_key =  function (data, params, size) {
    pointsGrob(0.5, 0.5, pch=16, gp = gpar(col = alpha(data$edge_colour, 
        data$edge_alpha)))
}

# note had to suppress fill key
ggraph(g) + 
  geom_edge_link(aes(colour = factor(year))) +
  geom_node_point() +
  geom_edge_density(aes(fill = factor(year)), show.legend = FALSE) 

Но я полагаю, что обновление GeomEdgeDensity - это больше, чем вы хотите, поскольку нам нужно извлечь эстетический цвет fill . Итак, отсюда

X = ggraph:::GeomEdgeDensity

X$draw_key = function (data, params, size) {
    pointsGrob(0.5, 0.5, gp = gpar(col = alpha(data)), pch=16)
}

environment(X) = environment("ggraph")
assignInNamespace("GeomEdgeDensity", X, ns = "ggraph")

ggraph(g) + 
  geom_edge_link(aes(colour = factor(year)), show.legend = FALSE) +
  geom_node_point() +
  geom_edge_density(aes(fill = factor(year))) 

Есть идеи?

10000