Итак, как и в заголовке, мне нужно уметь составлять графики некоторых графиков и сравнивать их. Для этого я считал, что достаточно передать координаты, а затем построить их. Затем я обнаружил, что графики отображаются в соответствии с указанными координатами, а также в соответствии с количеством узлов (или количеством подсетей или любым другим параметром, который я не могу понять). Чтобы разобраться в проблеме, приведем пример (часть, связанная с евклидовым расстоянием, прокомментирована, поскольку она требует определенного пакета, но я также опубликовал вывод):
library(igraph)
#library(TSdist)
smallNet <- graph(edges=c(1,2), n=2, directed=F)
V(smallNet)$name <- c("mint", "pepper")
# first try
dev.new()
V(smallNet)$x <- c(10, 23)
V(smallNet)$y <- c(29, 36)
plot(smallNet, vertex.label.color="midnightblue", vertex.size=40, vertex.color="thistle1", layout=layout_nicely)
#print(paste("distance ", EuclideanDistance(V(smallNet)$x, V(smallNet)$y)))
#[1] "distance 23.0217288664427"
# second try
dev.new()
V(smallNet)$x <- c(1400, 1894)
V(smallNet)$y <- c(3700, 4140)
plot(smallNet, vertex.label.color="midnightblue", vertex.size=40, vertex.color="thistle1", layout=layout_nicely)
#print(paste("distance ", EuclideanDistance(V(smallNet)$x, V(smallNet)$y)))
#[1] "distance 3214.73420363177"
# third try
dev.new()
V(smallNet)$x <- c(10000, 26230)
V(smallNet)$y <- c(13800, 32150)
plot(smallNet, vertex.label.color="midnightblue", vertex.size=40, vertex.color="thistle1", layout=layout_nicely)
#print(paste("distance ", EuclideanDistance(V(smallNet)$x, V(smallNet)$y)))
#[1] "distance 7034.65706342534"
Дело в том, что(евклидовы) расстояния различны, но, если я посмотрю на графики, ничего очевидно не изменится. С другой стороны, что-то должно отличаться, так как расстояние до узла увеличивается.
Я заметил, что добавление нескольких узлов улучшает визуализацию, но все же я считаю, что получаемые графики не так или иначе, соблюдая фактические расстояния. Вот еще один пример кода с большим количеством узлов:
# first try
evenBigger <- graph(edges=c(1,2, 2,3, 3,1, 4,5), n=5, directed=F)
V(evenBigger)$name <- c("pear", "mango", "blueberry", "coconut", "fig")
dev.new()
V(evenBigger)$x <- c(0, 25, 50, 70, 60)
V(evenBigger)$y <- c(0, 80, 20, 120, 40)
plot(evenBigger, vertex.label.color="midnightblue", vertex.size=40, vertex.color="thistle1", layout=layout_nicely)
# second try
evenBigger <- graph(edges=c(1,2, 2,3, 3,1, 4,5, 6,6), n=6, directed=F)
V(evenBigger)$name <- c("pear", "mango", "blueberry", "coconut", "fig", "jujube")
dev.new()
V(evenBigger)$x <- c(0, 25, 50, 70, 120, 2000)
V(evenBigger)$y <- c(0, 80, 20, 120, 140, 2000)
plot(evenBigger, vertex.label.color="midnightblue", vertex.size=40, vertex.color="thistle1", layout=layout_nicely)
похоже, что в этих двух новых примерах что-то изменяется, поскольку узел jujube теперь далеко,по сравнению с другими узлами. Сопоставимы ли теперь две сети с графической точки зрения? Если нет (что, я считаю, имеет место) ... что я должен сделать, чтобы сделать их сопоставимыми?
Я попытался установить xlim и ylim, как упомянуто здесь , но это выглядитвроде бы не работает:
# first try
evenBigger <- graph(edges=c(1,2, 2,3, 3,1, 4,5), n=5, directed=F)
V(evenBigger)$name <- c("pear", "mango", "blueberry", "coconut", "fig")
dev.new()
V(evenBigger)$x <- c(0, 25, 50, 70, 60)
V(evenBigger)$y <- c(0, 80, 20, 120, 40)
plot(evenBigger, vertex.label.color="midnightblue", vertex.size=40, vertex.color="thistle1", xlim=c(0, 2500), ylim=c(0, 2500), layout=layout_nicely)
# second try
evenBigger <- graph(edges=c(1,2, 2,3, 3,1, 4,5, 6,6), n=6, directed=F)
V(evenBigger)$name <- c("pear", "mango", "blueberry", "coconut", "fig", "jujube")
dev.new()
V(evenBigger)$x <- c(0, 25, 50, 70, 120, 2000)
V(evenBigger)$y <- c(0, 80, 20, 120, 140, 2000)
plot(evenBigger, vertex.label.color="midnightblue", vertex.size=40, vertex.color="thistle1", xlim=c(0, 2500), ylim=c(0, 2500), layout=layout_nicely)
Предложения очень приветствуются!