2

我有以下图表

set.seed(1410)
df<-data.frame(
"site.x"=c(rep("a",3),rep("b",3),rep("c",3),rep("d",3)),
"site.y"=c(rep(c("e","f","g"),4)),
"bond.strength"=sample(1:100,12, replace=TRUE))

library(igraph)
df<-graph.data.frame(df)
V(df)$names <- c("a","b","c","d","e","f","g")
layOUT<-data.frame(x=c(rep(1,4),rep(2,3)),y=c(4:1,3:1))
E(df)[ bond.strength < 101 ]$color <- "red"
E(df)[ bond.strength < 67 ]$color <- "yellow"
E(df)[ bond.strength < 34 ]$color <- "green"
V(df)$color <- "white"
l<-as.matrix(layOUT)
plot(df,layout=l,vertex.size=10,vertex.label=V(df)$names,
edge.arrow.size=0.01,vertex.label.color = "black")

在此处输入图像描述

我想沿着顶点 a 和 d 之间的垂直距离均匀分布顶点“ge”,以使我当前的图形(见下文)更漂亮。如您所见,这里非常拥挤。

在此处输入图像描述

此外,我想将两列顶点在 x 轴上靠得更近,但我注意到调整布局中的 x 坐标没有响应。例如,以下两个布局生成的图形看起来完全相同,尽管 x 坐标进行了剧烈调整。

layOUT<-data.frame(x=c(rep(1,4),rep(2,3)),y=c(4:1,3:1))

layOUT<-data.frame(x=c(rep(1,4),rep(100,3)),y=c(4:1,3:1)) 

感谢您提供的任何建议。

4

1 回答 1

5

您的第二个问题更容易回答:igraph 将布局重新缩放为坐标系中由 (-1, -1) 和 (1,1) 跨越的矩形。如果您想避免这种情况,请传递rescale=FALSE给该plot函数——但在这种情况下,您需要确保坐标确实有意义并且不在绘图区域之外。

关于您的第一个问题:由于您是在layOUT变量中手动构建布局,因此没有什么可以阻止您手动调整 Y 坐标。首先,从 获取 X=1 的顶点的最小和最大 Y 坐标layOUT

min.y <- min(layOUT$y[layOUT$x == 1])
max.y <- max(layOUT$y[layOUT$x == 1])

然后只需在 min.y 和 max.y 之间均匀地隔开 X 坐标为 2 的顶点的 Y 坐标:

vs.on.right <- which(layOUT$x == 2)
n <- length(vs.on.right)
layOUT$y[vs.on.right] <- (0:n)*(max.y-min.y)/n + min.y
于 2012-08-23T11:33:37.500 回答