Это зависит от того, что вы подразумеваете под «степенью центральности»: у узла в графе есть степень, то есть число связей, которые он имеет с другими узлами;в ориентированных графах это сумма степеней в градусах и градусах.
Кроме того, вы можете вычислить меру центральности для узла, который, по сути, пытается ответить на вопрос, как «хорошо связаны», «встроенный "или просто" центральный "узел находится на графике (я хорошо осознаю, что это сокращает многие понятия центральности, но это StackOverflow, а не Википедия).Существует довольно много разных типов центральности, каждый из которых использует свой подход.Опять же, Википедия или ваша любимая книга по теории графов здесь ваш друг.
Вот код, который иллюстрирует как вычисление степени узла, так и меру центральности:
library(igraph)
df <- data.frame(
"from" = c("Mickey", "Minnie", "Huey", "Donald", "Scrooge"),
"to" = c("Daffy", "Donald", "Minnie", "Minnie", "Minnie")
)
g <- graph_from_data_frame(df, directed = TRUE) # or FALSE
g <- set_edge_attr(g, name = "tnum", value = c(12345, 34567, 21345, 22345, 22456))
plot.igraph(g, edge.label = edge_attr(g, "tnum"))
degree(g)
centralization.betweenness(g)
Если вам требуются другие меры центральности, то поиск в руководстве по игре для centrality
или centralization
поможет вам.
Если вы хотите раскрасить свой график на основеэти меры центрильности, посмотрите на этот код и обратитесь к превосходному руководству по игре, если что-то неясно:
library(igraph)
df <- data.frame(
"from" = c("Mickey", "Minnie", "Huey", "Donald", "Scrooge"),
"to" = c("Daffy", "Donald", "Minnie", "Minnie", "Minnie")
)
# create an igraph object from the dataframe, which essentially is a list
# of edges between nodes
g <- graph_from_data_frame(df, directed = TRUE) # or FALSE
# each edge receives "tnum" as an attribute
g <-
set_edge_attr(g,
name = "tnum",
value = c(12345, 34567, 21345, 22345, 22456))
# calculate betweenness of nodes and store it in an attribute "color" of the
# vertices. The color-attribute is treated specially when plotting graphs.
V(g)$color <- betweenness(g)
plot.igraph(g,
# plot edge labels from the "tnum" attribute
edge.label = edge_attr(g, "tnum"),
# specify the palette of colours to use when plotting vertices
palette = heat.colors(n = 99))
# same as above; we multiply by 100 to make sure all values are > 0, otherwise
# the colour will be interpreted as 0 (usually, white)
V(g)$color <- (eigen_centrality(g)$vector) * 100
# assign edge weights based on the last digit of "tnum"
E(g)$weight <- E(g)$tnum %% 10
plot.igraph(
g,
edge.label = edge_attr(g, "tnum"),
edge.width = E(g)$weight,
edge.arrow.size = .8,
palette = heat.colors(n = 99)
)