gpt4 book ai didi

r - 在 r 中的 igraph 中均匀地间隔顶点

转载 作者:行者123 更新时间:2023-12-02 22:32:01 25 4
gpt4 key购买 nike

我有如下图表

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")

enter image description here

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

enter image description here

我还想将两列顶点在 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))

感谢您的任何建议。

最佳答案

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

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

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

然后将 X 坐标为 2 的顶点的 Y 坐标均匀分布在 min.y 和 max.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

关于r - 在 r 中的 igraph 中均匀地间隔顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12088473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com