Вопрос по igraph, r, plot – Оси igraph неверно построены

7

если я сделаю графикg:

g <- read.table(text="

 A  B   W

 1  55  3
 2  55  5
 3  99  6 ",header=TRUE)

library(igraph)
g <- graph.data.frame(g)

и матрица координат:

y<-1:5
x<-c(0.1,0.1,0.2,0.2,0.8)
l<-data.frame(x,y)
l<-as.matrix(l)

Я могу построить график с позициями узлов в соответствии с пользовательскими координатами и осями графика.

plot(g,layout=l,rescale=F,axes=TRUE,ylim=c(0,6),xlim=c(0,1))

graph with wrong axes

Но ограничения по оси не функционируют должным образом, и я думаю, что они изменяются пределами по оси. Как я могу контролировать xaxis так, как я хочу, например, удерживая его между 0 и 1.

то естьplot(x,y,xlim=c(0,1),ylim=c(0,6))

Это ошибка? Если это так, и это не может быть решено, есть ли другой пакет, который будет иметь такую же функциональность?

Ваш Ответ

1   ответ
18

Короткий ответ: вам нужно установитьasp аргумент призыва к заговору0 по умолчаниюasp = 1 который производит поведение, которое вы видите (то есть это не ошибка, это особенность). Длинный ответ с объяснением следует.

Как вы правильно заметили,xaxis варьируется в зависимости отyaxis, В частности, ось х имеет примерно такое же расстояние между старшими и младшими числами, какyaxis:

If yaxis = c(0,6), the x-axis goes from -3 to 4. 6 - 0 = 6 and 4 - (-3) = 7 If yaxis = c(0,3), the x-axis goes from -1 to 2. 3 - 0 = 2 - (-1) = 3

Igraph, кажется, сохраняет постоянное соотношение между осями.

Если вы позвоните?plot.igraph (функция построения вызывается сigraph объект, также можно найти черезhelp(package = "igraph")), вы найдете подSee Also:

igraph.plotting for the detailed description of the plotting parameters

И если вы нажмете на эту ссылку (или позвоните?igraph.plotting) и пройдемся по параметрам, которые вы найдете:

asp A numeric constant, it gives the asp parameter for plot, the aspect ratio. Supply 0 here if you don't want to give an aspect ratio.
It is ignored by tkplot and rglplot.

Defaults to 1.

Отсюда параметр аспектаasp по умолчанию1 в игре Если вы хотите другое соотношение, установите его на0:

plot(g,layout=l,rescale=F,axes=TRUE,ylim=c(0,6),xlim=c(0,1), asp = 0)

Это отвечает на ваш вопрос. Однако учтите, что очки сейчас довольно большие. Возможно, вы захотите поиграть со следующими параметрами (найдены на?igraph.plotting но обратите внимание, что многие параметры должны иметь префиксvertex. как сделано мной):

vertex.size Default is 15, 5 seems better vertex.label.cex Default is 1, 0.8 seems better.

Следующее производит более хороший заговор:

plot(g,layout=l,rescale=F,axes=TRUE,ylim=c(0,6),xlim=c(0,1), asp = 0, vertex.size = 5, vertex.label.cex = 0.8)

nicer plot

Похожие вопросы