![](/img/trans.png)
[英]Organize graph nodes vertically according to a 'y' value in R / ggraph
[英]linear graph with specific scale for nodes in ggraph R
我正在嘗試使用出色的 ggraph 庫來描繪一些非常難以描繪的科學工作的相互關系。 具體來說,我想展示基因座中的 SNP-SNP 相互作用。 如果我將相互作用繪制為圖形的彎曲節點,其中 SNP 根據其遺傳位置以線性方式定位,那就太好了。 來自 ggraph 庫的 geom_edge_arc() 美學將是理想的。 但是,我無法根據位置將節點按順序排列。
這是一個例子
library(igraph)
library(tidyverse)
library(ggraph)
set.seed(10)
nodes <- tibble(nodes = paste("SNP",seq(1:10)), pos = sample(c(10000:20000),10))
edges <- expand.grid(nodes$nodes,nodes$nodes) %>%
mutate(interaction = rnorm(100)) %>%
filter(abs(interaction)>1)
gr <- graph_from_data_frame(edges, vertices = nodes)
ggraph(gr, 'linear', circular=F) +
geom_edge_arc(aes(edge_width=interaction))
節點在這里均勻分布,作為“因子”。 但是,我想將它們放置在pos
變量指定的 x 坐標上(這反過來又成為節點的一個屬性)。 將+ geom_node_point(aes(x=pos))
到 ggplot 對象不會導致正確的渲染。 我也可以使用“基本”ipgraph 來繪制繪圖,但我喜歡 ggraph 和 ggplot2,這將是一種優雅而簡單的繪圖方式。
親切的問候,並提前致謝,
羅伯特
不確定這是否仍然相關,但有兩種方法可以解決這個問題。
正如@axeman 所指出的,您可以使用manual
布局,並基本上將x
和y
坐標傳遞給它:
ggraph(gr,
layout = 'manual',
node.position = data_frame(y = rep(0, length(nodes$pos)), x = nodes$pos)) +
geom_edge_arc(aes(edge_width=interaction))
另一種方法是geom_edge_arc
內的x
aes 。 為了能夠將節點屬性傳遞給aes
我們需要使用geom_edge_arc2
:
ggraph(gr, 'linear', circular=F) +
geom_edge_arc2(aes(edge_width=interaction, x = node.pos))
由reprex 包(v0.2.0) 於 2018 年 5 月 30 日創建。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.