2012-06-28 5 views
5

Я нашел это answer действительно полезным. Это помогает мне построить сеть/графики и выбрать координаты для узлов на графике.igraph фиксированный координаты узлов узла

Однако макет перетаскивает координаты с -1 на 1. Сначала я попытался выяснить, как это делается, но не может. он делает что-то подобное?

(coordinate - mean(coordinates))/(coordinate + mean(coordinates) 

Во-вторых, есть способ сохранить исходные координаты? Я хотел бы поместить оси с графиком, и поэтому предпочел бы не перетаскивать все.

ответ

9

Ответ на ваш первый вопрос находится в исходном коде функции plot.igraph; введите plot.igraph в командной строке R, чтобы получить полный исходный код. Существует часть там, которая говорит:

layout <- layout.norm(layout, -1, 1, -1, 1) 

layout.norm является еще одной функцией igraph, который делает чудеса для вас; введите layout.norm, чтобы посмотреть, как это работает.

Теперь ответ на второй вопрос очень прост; просто перейдите rescale=F к аргументам plot, в котором igraph пропустите все отделение в plot.igraph, где вызывается layout.norm, поэтому он будет работать с вашими исходными координатами. Затем вы можете использовать xlim и ylim, как обычно, для установки пределов осей X и Y.

+1

большое спасибо за вашу помощь, проверяя исходный код сейчас. Ограничения по осям, по-видимому, связаны друг с другом, т. Е. 'Ylim = c (0,6)' делает диапазон «xlim» равным 6. что раздражает, но это скачок вперед, спасибо снова. – user1320502

+2

@ user1320502: Установите 'asp = FALSE', чтобы избежать соотношения по умолчанию 1: 1. –

+0

Почему ничего не получается, когда я устанавливаю 'rescale = FALSE'? – pengchy

0
set.seed(111) 
    ig <- graph_from_data_frame(as.data.frame(matrix(sample(letters,40,rep=TRUE),nc=2))) 
    set.seed(123) 
    ig.layout <- layout.fruchterman.reingold(ig) 
    rownames(ig.layout) <- V(ig)$name 
    par(bg="white",mar=c(0,0,0,0),oma=c(0,0,0,0)) 
    plot.igraph(ig,layout=ig.layout,vertex.color=adjustcolor("gray",alpha.f=0.5),rescale=FALSE,xlim=c(4,11),ylim=c(4,11)) 
    set.seed(321) 
    ig.sub <- subgraph(ig,sample(V(ig)$name,5)) 
    plot.igraph(ig.sub,layout=ig.layout[V(ig.sub)$name,],add=TRUE,vertex.color=adjustcolor("orange",alpha.f=0.5),rescale=FALSE) 

Этот код выводит график, в котором оранжевый узел является добавленным позже.

enter image description here

Смежные вопросы