Как построить направленный ациклический решеточный граф в 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))