[英]Controlling facet order in ggraph
我想使用facet繪制圖形,其中邊緣在面板之間變化。 面板按字母順序自動排序(按照ggplot
中的ggplot
)。 一個簡單的例子:
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)
這很好,節點位置是預先設定的,但邊緣根據g
而不同。
但是,我想選擇facet出現的順序。 所以在這種情況下,首先是b
然后a
,就像我在創建上面的圖形時命令它們一樣。
在ggplot
可以改變因子g
的順序。 但是,創建布局不會顯示g
:
create_layout(g, 'kk')
xy 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)
如何為切面提供自定義排序?
ggraph使用與ggplot2相同的概念,即分類數據的排序是通過使用因子完成的。 因此,您可以通過將排序編碼為facet變量中的級別來控制構面順序。
但是有一個小問題 - igraph對因子沒有很好的支持,因此在分配給節點或邊緣數據時通常會丟棄因子。 我已經向igraph提交了一個解決這個問題的PR ,但與此同時我建議你使用tidygraph來解決這個問題。 最終tidygraph將在ggraph中的所有內容后面使用,所以你也可以加入
如果您決定直接在igraph中工作而不能等待下一個版本,您可以通過以這種方式使用vertex.attributes()
將因子轉換為igraph:
vertex.attributes(graph)$factor_attr <- value
或者與edge.attributes
等效
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.