2017-05-26 14 views
4

ファセットを使用してグラフをプロットすると、パネル間でエッジが異なる場合があります。パネルは自動的にアルファベット順に並べ替えられます(ggplotで習慣的です)。単純な例は:これは大きいggraphでのファセットの順序の制御

library(igraph) 
library(ggraph) 

g <- make_empty_graph() + 
    vertices(1:2) + 
    edges(1:2, 2:1, g = c('b', 'a')) 

ggraph(g, 'kk') + 
    geom_edge_link(arrow = grid::arrow()) + 
    geom_node_label(aes(label = name)) + 
    facet_edges(~g) 

enter image description here

、ノード位置はpreseveredされるが、エッジがg異なり。

ただし、ファセットが表示される順序を選択したいと思います。したがって、この場合は、最初にb、次にaというように、私は上記のグラフを作成している間に注文しました。

ggplotでは、因子gの順番が変わります。しかし、レイアウトを作成することはgは表示されません。

create_layout(g, 'kk') 
  x    y name ggraph.orig_index circular ggraph.index 
1 -0.9021575 -1.410825e+00 1     1 FALSE   1 
2 -1.0000000 1.224606e-16 2     2 FALSE   2 

縁が手動要因に属性を変更し、順序を変更しますが、ラベルは、数値に強制されています

g2 <- make_empty_graph() + 
    vertices(1:2) + 
    edges(1:2, 2:1, g = factor(c('b', 'a'), levels = c('b', 'a'))) 

ggraph(g2, 'kk') + 
    geom_edge_link(arrow = grid::arrow()) + 
    geom_node_label(aes(label = name)) + 
    facet_edges(~g) 

enter image description here

ファセットの注文?

答えて

2

ggraph ggplot2と同じ概念を使用します。つまり、カテゴリデータの順序付けは要素を使用して行われます。したがって、ファセット変数のレベルとして順序をエンコードすることで、ファセット順序を制御します。

igraphは要素を非常によくサポートしていませんが、ノードやエッジデータに割り当てられた要素はしばしば削除されます。私はこれを解決するPR to igraphを提出しましたが、その間にこの問題を回避するtidygraphを使用することをお勧めします。最終的には、ggraphのすべての背後にはひそかにグラフが使用されますので、機内に乗ることもできます。

igraphで直接作業することを決定し、次のバージョンを待つことができない場合は、vertex.attributes()このよう:edge.attributes

+0

おかげでトーマスと

vertex.attributes(graph)$factor_attr <- value

または同等に!私はigraphと結婚していませんが、私はCRANのリリースでこれを使うつもりです。だから、今ではちょっと早すぎます。私は今後の開発を見据えて、そのigraphコードを試してみましょう! – Axeman

+0

Tidygraphは、次回のdplyrリリース後の夏にCRANでリリースされる予定であるため、時間枠によっては問題ではない可能性があります – ThomasP85

4

一つの可能​​な解決策は、単にバック実際の因子ラベルをオウムカスタムラベル貼付を使用し、次いで、(問題の第二プロットとして)最初の因子に強制することである。

my_lab <- function(labels) { 
    list(g = c('b', 'a')) 
} 

ggraph(g2, 'kk') + 
    geom_edge_link(arrow = grid::arrow()) + 
    geom_node_label(aes(label = name)) + 
    facet_edges(~g, labeller = my_lab) 

enter image description here

関連する問題