Eu tenho este gráfico em R:
library(igraph)
width <- 30
height <- 20
num_nodes <- width * height
x <- rep(1:width, each = height)
y <- rep(1:height, times = width)
g <- make_empty_graph(n = num_nodes, directed = FALSE)
get_node_index <- function(i, j) (i - 1) * height + j
edges <- c()
for(i in 1:width) {
for(j in 1:height) {
current_node <- get_node_index(i, j)
if(i < width) edges <- c(edges, current_node, get_node_index(i + 1, j))
if(j < height) edges <- c(edges, current_node, get_node_index(i, j + 1))
}
}
g <- add_edges(g, edges)
V(g)$x <- x
V(g)$y <- y
par(mfrow=c(1,1))
V(g)$name <- 1:num_nodes
plot(g, vertex.size = 7, vertex.label = V(g)$name, vertex.label.cex = 0.6, main = "Map with Node Indices")
Quero escolher algum nó neste gráfico e colorir todos os nós neste gráfico proporcionalmente à distância que eles estão localizados deste nó. Ou seja, todos os nós da mesma distância têm a mesma cor - e os nós mais próximos do nó são mais escuros, enquanto os nós mais distantes são mais claros.
Com base na minha pergunta anterior ( Calculando a menor distância entre vários pontos em um gráfico? ), tentei fazer isso (por exemplo, selecionar o nó 50):
distances_from_50 <- distances(g, v = 50, to = V(g))
max_dist <- max(distances_from_50)
color_palette <- colorRampPalette(c("#08306B", "#F7FBFF"))(max_dist + 1)
V(g)$color <- color_palette[distances_from_50 + 1]
V(g)$color[50] <- "red"
par(mfrow=c(1,1), mar=c(5,4,4,2))
plot(g,
vertex.size = 7,
vertex.label = V(g)$value,
vertex.label.cex = 0.6,
main = "Distance-based Color Gradient from Node 50",
layout = cbind(V(g)$x, V(g)$y))
Existe algo mais que pode ser feito para que os nós com cores mais escuras ainda tenham rótulos visíveis?
Acho que isso depende da sua percepção subjetiva sobre diferenciação de cores. Você pode definir uma paleta de cores especificamente para rótulos de vértices, por exemplo,