Я пытаюсь изменить форму, используемую в легенде, с квадрата на круг с эстетикой заливки, но ни один из аргументов переопределения, похоже, не работает.
Если:
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))))
Производит это
[
Я не уверен, возможно ли добавить дополнительный слой в 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)))