Как построить направленный ациклический решеточный граф в R

Мне нужно построить график направленной ациклической решетки размером mxn, такой же, как на этом рисунке, но без ребер по контуру и без вершин по углам:

Это возможно сделать с graph.lattice функционировать? Если да, как установить метки таких вершин (т. Е. (X,y) формат, а не просто целое число) и удалить указанные ребра и вершины? Кроме того, возможно ли построить график в таком положении (как на рисунке), не используя функцию tkplot и не поворачивая ее тогда?

1 ответ

Решение

Я не совсем уверен, что вы подразумеваете под "без краев на контуре", но вот некоторые моменты:

  • Читать ?igraph.plotting для полного списка параметров построения.
  • Если вы не хотите рамки на вершинах, установите vertex.frame.color к тому же значению, что и vertex.color,
  • использование layout.grid, увидеть ?layout.grid,
  • использование vertex.label установить метки.
  • Если вы хотите опустить некоторые ребра, то удалите их или установите их ширину на ноль или их цвет на цвет фона.
  • Если вы хотите опустить некоторые вершины, то прикрепите координаты, рассчитанные по layout.grid в качестве атрибутов вершин, а затем удалите вершины из графа.

Нечто подобное может сработать:

g <- graph.lattice( c(5,5) )
lay <- layout.grid(g)
V(g)$x <- lay[,1]
V(g)$y <- lay[,2]
V(g)$color <- V(g)$frame.color <- "darkolivegreen"
V(g)$label.color <- "lightgrey"
V(g)$label <- paste(V(g)$x+1, V(g)$y+1, sep=",")

Чтобы удалить ребра, вы можете выбрать их на основе координат вершин:

torem <- c(E(g)[ V(g)[x==0] %--% V(g)[x==0] ], 
           E(g)[ V(g)[y==0] %--% V(g)[y==0] ], 
           E(g)[ V(g)[x==4] %--% V(g)[x==4] ], 
           E(g)[ V(g)[y==4] %--% V(g)[y==4] ])
g2 <- delete.edges(g, torem)

А затем удалите вершины и построите график:

g3 <- delete.vertices(g2, V(g2)[ x %in% c(0,4) & y %in% c(0,4) ])
plot(g3, layout=cbind(V(g3)$x, V(g3)$y))

сюжет

Другие вопросы по тегам