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" を均等に配置したいと考えています。ご覧のとおり、かなり混んでいます。

ここに画像の説明を入力

また、2 列の頂点を x 軸上で近づけたいのですが、レイアウトで x 座標を調整しても反応しないことに気付きました。たとえば、次の 2 つのレイアウトでは、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

2 番目の質問は簡単に答えられます。igraph は、座標系で (-1, -1) と (1,1) で囲まれた四角形にレイアウトを再スケーリングします。これを回避したい場合はrescale=FALSEplot関数に渡しますが、この場合、座標が実際に意味をなしており、プロット領域の外側にないことを確認するのはあなた次第です。

最初の質問について: 変数でレイアウトを手動で作成しているため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 に答える