簡體   English   中英

ggraph R 中節點具有特定比例的線性圖

[英]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布局,並基本上將xy坐標傳遞給它:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM