1
df

network  bus_unit   outage
A        Online     4
B        Internal   5
A        Finance    6
B        IT         5
A       IT         6
A       Marketing  40

次のようなものでできる igraph を大きくする必要があります。

g <- graph.data.frame(df)
plot(g,  
     layout = layout.fruchterman.reingold,  
     vertex.label = V(g) $name,
     vertex.label.color= "black", 
     edge.arrow.size=1, 
     edge.curved=FALSE, 
     edge.label=df$outage)

私の問題は、ネットワーク A が原因であるため、ネットワーク A をグラフの上に表示したいということです。このigraphを整理したり、頂点を移動したりする方法はありますか?

ご協力いただきありがとうございます。

4

1 に答える 1

2

に渡すlayout = layout.fruchterman.reingoldplot()、レイアウトを構築するための関数が与えられます。ただし、外部でレイアウトを設定してplot()直接操作することもできます。これは、座標の単純なマトリックスです。

# Create an initial layout
bad.a.layout <- layout.fruchterman.reingold(g)

# ... it's really just a matrix of coordinates, with each row
# corresponding to a vertex
bad.a.layout
plot(g, layout = bad.a.layout)

# Tweak arbitrarily - e.g., bump Network A nodes up a bit on the y-axis
bad.a.layout[V(g)$network %in% "A", 2] <- bad.a.layout[V(g)$network %in% "A", 2] + 10
plot(g, layout = bad.a.layout)

もちろん、それが実際にうまくいくという保証はありませ。しかし、これはレイアウトを自分に合うように変更するための基本的なアプローチです。1 回限りのプロジェクトの場合は、手動操作で問題ない場合があります。それ以外の場合は、おそらくアルゴリズムをより深く調べたいと思うでしょう (これは私にとってはちょっとした穴のようなものであることが証明されていますが、運が良いかもしれません)。

補足: レイアウトを操作したくない場合でも、ほとんどの場合、プロット関数の外でレイアウトを設定します。中規模のグラフであっても、プロットを実行するたびに再計算しないようにすると、多くの時間を節約できます。

于 2012-10-05T17:16:22.433 に答える