Я хочу построить матрицу смежности графа в виде шахматной доски. Код работает нормально с графами, созданными с использованием таких функций, как встроенный «make_star», но завершается ошибкой при использовании графов, созданных из матриц смежности в CSV-файлах.
CSV-файл, используемый в этом тесте , можно найти здесь
require(igraph)
require(ggplot2)
require(reshape2)
require("igraph")
loadGraph <- function(dataPath)
{
loadedDF <- read.csv(dataPath,
header=FALSE,
sep=',', #separate by comma
quote="'", # quote by '
stringsAsFactors = FALSE,
check.names = FALSE)
#selects numeric values, drops the rest
loadedDF <- loadedDF[sapply(loadedDF, is.numeric)]
rownames(loadedDF) <- colnames(loadedDF)
loadedMat <- as.matrix(loadedDF)
#we use the rownames to index deletions
g <- graph_from_adjacency_matrix(loadedMat) %>%
set_vertex_attr("label", value = 1:nrow(loadedDF))
return(g)
}
plotAdjMatrix <- function(graphToPlot){
gAdjMatrix <- as.matrix(as_adj(graphToPlot))
logMatrix <- (gAdjMatrix == 1)
matData <- melt(logMatrix)
g <- ggplot(data = matData,
aes(Var2, Var1)) +
geom_tile(aes(fill = value,
color = value)) +
coord_equal() +
scale_fill_manual(values = c("TRUE" = "black", "FALSE" = "white")) +
scale_color_manual(values = c("TRUE" = "white", "FALSE" = "black")) +
theme_bw() +
theme(axis.title = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
panel.grid = element_blank()) +
guides(fill = FALSE, color = FALSE) +
scale_y_reverse()
print(g)
}
## Test #1
g1 <- make_star(5)
# this works
plotAdjMatrix(g1)
## Test #2
g2 <- loadGraph("./data/starGraphAdjMatrix.csv")
# this fails
plotAdjMatrix(g2)
Вот как выглядит g1
g1
IGRAPH b93c150 D--- 5 4 -- In-star
+ attr: name (g/c), mode (g/c), center (g/n)
+ edges from b93c150:
[1] 2->1 3->1 4->1 5->1
А это g2:
> g2
IGRAPH e338cdb DN-- 5 8 --
+ attr: name (v/c), label (v/n)
+ edges from e338cdb (vertex names):
[1] V1->V2 V1->V3 V1->V4 V1->V5 V2->V1 V3->V1 V4->V1 V5->V1
Глядя на это, у меня была идея переименовать вершины в «g2» в «1, 2, 3, ...» и попытаться удалить строку:
set_vertex_attr("label", value = 1:nrow(loadedDF)
безрезультатно.