Используйте матрицу для разметки в R. Почему точки не нарисованы в их координатах? - PullRequest
0 голосов
/ 11 октября 2019

все!

Я пытаюсь использовать igraph в R и построить вершины и ребра случайного графа. Координаты каждой вершины выбираются случайным образом из (0,1) и сохраняются в строке матрицы, CENTERS . Однако после с использованием layout = CENTERS некоторые точки, по-видимому, нарисованы в другом месте (отрицательная координата x / y).

n = 5
r = 0.1
# randomly assign coordinates to n points
CENTERS <- matrix(0, nrow = n, ncol = 2)
for (t in 1:n)
{
  CENTERS[t,1] <- runif(1)
  CENTERS[t,2] <- runif(1)
}
# create adjacency matrix
# decide connect or not by distance
M <- matrix(0, nrow = n, ncol = n)
for (i in 1:n)
{
  for (j in 1:n)
  {
    if (i != j)
    {
      dist <- sqrt(sum((CENTERS[i,]-CENTERS[j,])^2))
      if (dist < 2*r) {M[i,j] <- 1}
    }
  }
}
# plot the random graph
g <- graph.adjacency(M)
plot(g, layout=CENTERS, axes = TRUE, 
     edge.arrow.mode=0, edge.color="black", edge.width=2,
     vertex.label=NA, vertex.color="red", vertex.shape='square', vertex.size=5)

График Рэндама

Почему это происходит? Как я могу убедиться, что каждая вершина находится в своих координатах? Спасибо!

1 Ответ

0 голосов
/ 11 октября 2019

Как предложила @nicola, при построении графиков igraph данные изменяются в диапазоне от -1 до 1 для x и y. Вы можете подавить это поведение, если захотите, указав rescale=FALSE. Однако даже при rescale=FALSE, plot.igraph устанавливает пределы печати от -1 до 1. Поэтому вам также необходимо установить xlim и ylim. Я думаю, что вы ищете:

plot(g, layout=CENTERS, axes = TRUE, 
     edge.arrow.mode=0, edge.color="black", edge.width=2,
     vertex.label=NA, vertex.color="red", vertex.shape='square', vertex.size=5,
     rescale=FALSE, xlim=c(0,1), ylim=c(0,1))

graph - not rescaled

...