首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在DiagrammeR中的节点中安装标签

在DiagrammeR中的节点中安装标签
EN

Stack Overflow用户
提问于 2021-12-30 10:59:07
回答 2查看 194关注 0票数 0

我需要绘制具有双向边缘和节点标签的定向网络。节点名的长度有时短,有时长。数据是动态生成的,所以每次都是随机的。

下面是我的数据示例:

代码语言:javascript
复制
library(DiagrammeR)

# create data:
links=data.frame(
    source=c("AAAAAAAAAAAAAAAAAAAAAAAA","AAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAA","J", "BBBBBBBBB",
             "BBBBBBBBBBBBBBBBBBBBB", "CCCCCCCCCCC", "CCCCCCCCCCC", "D","IIIIIIII"),
    target=c("BBBBBBBBBBBBBBBBBBBBB","BBBBBBBBBBBBBBBBBBBBB", "CCCCCCCCCCC", "D", 
             "J","AAAAAAAAAAAAAAAAAAAAAAAA","E", "F", "G", "H", "IIIIIIII","IIIIIIII")
)


labels <- unique(c(links$source,links$target))

nodes <- data.frame (id = labels, label = labels )

i_graph_1 <-
    DiagrammeR::create_graph() %>% 
    DiagrammeR::add_nodes_from_table(
        table = nodes,
        label_col = label) %>% 
    DiagrammeR::add_edges_from_table(
        table = links,
        from_col = source,
        to_col = target,
        from_to_map = id_external)%>% 
    select_nodes_by_id(nodes = 1:length(labels)) %>% 
    set_node_attrs_ws(
        node_attr = shape,
        value = "rectangle") %>% 
    clear_selection()

gr <- i_graph_1 %>% DiagrammeR::render_graph()

writeLines(
    export_svg(gr), "c:\\temp\\n1.svg"
    )

我的结果图片:

  1. 是否有可能使A<->B,A<->J链接双向而不是2个单向链接?
  2. 是否可以在节点中安装标签而不是重叠节点边框?

更新:

如果我使用fixedsize = False,结果仍然不太好。节点重叠。

代码语言:javascript
复制
i_graph_1 <-
    DiagrammeR::create_graph() %>% 
    DiagrammeR::add_nodes_from_table(
        table = nodes,
        label_col = label) %>% 
    DiagrammeR::add_edges_from_table(
        table = links,
        from_col = source,
        to_col = target,
        from_to_map = id_external)%>% 
    select_nodes_by_id(nodes = 1:length(labels)) %>% 
    set_node_attrs(node_attr = "fixedsize",values = FALSE) %>% 
    set_node_attrs_ws(
        node_attr = shape,
        value = "rectangle") %>% 
    clear_selection()

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-10 12:27:52

关键是使用graphviz属性layout = ,layout= 真的

和node_attr = "fixedsize",value= FALSE。

代码语言:javascript
复制
library(DiagrammeR)

# create data:
links=data.frame(
    source=c("AAAAAAAAAAAAAAAAAAAAAAAA","AAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAAAAAAAAAA","J", "BBBBBBBBB",
             "BBBBBBBBBBBBBBBBBBBBB", "CCCCCCCCCCC", "CCCCCCCCCCC", "D","IIIIIIII"),
    target=c("BBBBBBBBBBBBBBBBBBBBB","BBBBBBBBBBBBBBBBBBBBB", "CCCCCCCCCCC", "D", 
             "J","AAAAAAAAAAAAAAAAAAAAAAAA","E", "F", "G", "H", "IIIIIIII","IIIIIIII")
)

# Turn it into igraph object


labels <- unique(c(links$source,links$target))

nodes <- data.frame (id = labels, label = labels )

i_graph_1 <-
    DiagrammeR::create_graph() %>% 
    add_global_graph_attrs("layout", "dot", "graph") %>%
    add_global_graph_attrs("concentrate", "true", "graph") %>%
    DiagrammeR::add_nodes_from_table(
        table = nodes,
        label_col = label) %>% 
    DiagrammeR::add_edges_from_table(
        table = links,
        from_col = source,
        to_col = target,
        from_to_map = id_external)%>% 
    select_nodes_by_id(nodes = 1:length(labels)) %>% 
    set_node_attrs(node_attr = "fixedsize",values = FALSE) %>% 
    set_node_attrs_ws(
        node_attr = shape,
        value = "rectangle") %>% 
    clear_selection()


gr <- i_graph_1 %>% DiagrammeR::render_graph( )
gr

结果如下:

票数 1
EN

Stack Overflow用户

发布于 2021-12-30 13:20:22

不确定在1左右,但2是可能的。您只需使用edge_aes(dir="both")属性即可。aes.html

代码语言:javascript
复制
library(DiagrammeR)
library(dplyr)

graph <-
  create_graph() %>%
  add_path(
    n = 3,
    type = "path",
    edge_aes = edge_aes(
      style = "dot",
      color = c("red", "blue"),
      dir="both"))


graph %>%
  get_edge_df()

my_graph <- graph %>% DiagrammeR::render_graph()
my_graph
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70530678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档