Настройка атрибутов подграфа / кластера в Rgraphviz
Я хочу построить график через Rgraphviz, но не могу обработать атрибуты дизайна кластеров, которые я установил.
Подобные вопросы уже есть в SO и в других местах, но ни один из них не имеет реального минимального рабочего примера, и ни на один из них не дан ответ. Поэтому я хочу попытаться задать полный вопрос, чтобы получить полный ответ. В качестве введения в пакет я прочитал статью Джентри, Джентльмена и Хубера "Как построить график, используя Rgraphviz".
Мой пример сети:
library(Rgraphviz)
set.seed(123)
V <- letters[1:6]
M <- 1:4
g1 <- randomGraph(V, M, 0.2)
Если я хочу построить его, я могу легко дать ему некоторые атрибуты через список:
attributes <- list(node = list(shape = "rectangle", fixedsize = FALSE),
graph = list(layout = "dot", bgcolor = "transparent"))
plot(g1, attrs = attributes )
Построение через plot(g1)
дает следующий результат:
Теперь я хочу определить два кластера / подграфа. Это можно сделать следующим образом:
sg1= subGraph(c("a", "e", "f"), g1)
sg2= subGraph(c("b", "c", "d"), g1)
subGList <- vector(mode = "list", length = 2)
subGList[[1]] <- list(graph = sg1, cluster = TRUE)
subGList[[2]] <- list(graph = sg2, cluster = TRUE)
Построение графика снова теперь, включая subGlist
аргумент:
plot(g1, attrs = attributes , subGList = subGList)
Итак, очевидно, что произошли изменения в настройке, и хотя было бы удобно, если бы кластеры были немного более разделены, результат в порядке.
Теперь, если я хочу определить специфичные для кластера стили или попытаться создать их в рамке, у меня начнутся проблемы. Согласно странице 4 упомянутой вводной статьи можно просто добавить элемент под названием attrs
к спискам subGlist
,
Насколько я понимаю, это должно работать так:
subGList[[1]] <- list(graph = sg1,
cluster = TRUE,
attrs = c(fontcolor = "red"))
plot(g1, attrs = attrs, subGList = subGList)
К сожалению, это не так. Как уже упоминалось, я хотел бы создать свои кластеры (аналогично этому посту SO), но, поскольку я даже не могу обработать шрифты шрифтов кластеров, я думаю, что я совершаю более фундаментальную ошибку.
Мой полный код:
library(Rgraphviz)
set.seed(123)
V <- letters[1:6]
M <- 1:4
g1 <- randomGraph(V, M, 0.2)
attributes <- list(node = list(shape = "rectangle", fixedsize = FALSE),
graph = list(layout = "dot", bgcolor = "transparent"))
#plot(g1, attrs = attributes )
sg1= subGraph(c("a", "e", "f"), g1)
sg2= subGraph(c("b", "c", "d"), g1)
subGList <- vector(mode = "list", length = 2)
subGList[[1]] <- list(graph = sg1, cluster = TRUE)
subGList[[2]] <- list(graph = sg2, cluster = TRUE)
#plot(g1, attrs = attributes , subGList = subGList)
subGList[[1]] <- list(graph = sg1,
cluster = TRUE,
attrs = c(fontcolor = "red"))
plot(g1, attrs = attrs, subGList = subGList)
Я надеюсь, что кто-то может помочь! Спасибо