【问题标题】:In R: is there a way to render a graph for two groups of nodes with different lengths?在 R 中:有没有办法为两组不同长度的节点渲染图形?
【发布时间】:2019-01-16 23:45:02
【问题描述】:

我想从具有不同长度的两组不同节点生成一个图表。您可以在下面找到代码。

如您所见,我收到一条错误消息:错误:length(from) == length(to) is not TRUE !! 这个有解决办法吗?

感谢您的帮助!!

library(DiagrammeR)
g1<- c("a","b","c")
g2<-c("d","f")

#creating a node data frame
nodes1<- create_node_df(n=length(g1),
                   style= "filled",
                   color= "lightblue",
                   shape= "box")

nodes2<- create_node_df(n=length(g2),
                    style= "filled",
                    color= "lightblue",
                    shape= "box")
edges<-create_edge_df(from = g1,
                  to= g2,
                  rel= "related",
                  color= "black")

Error: length(from) == length(to) is not TRUE



all_nodes<- combine_ndfs(nodes1, nodes2)

create_graph(nodes_df = all_nodes,
                                    edges_df = edges,
                                    directed = TRUE)

【问题讨论】:

    标签: r graphviz diagrammer


    【解决方案1】:

    我怀疑您的意思是将g1 的每个顶点与g2 的每个顶点连接起来。在定义nodes1nodes2之后,让

    (all_nodes <- combine_ndfs(nodes1, nodes2))
    #   id type label  style     color shape
    # 1  1 <NA>  <NA> filled lightblue   box
    # 2  2 <NA>  <NA> filled lightblue   box
    # 3  3 <NA>  <NA> filled lightblue   box
    # 4  4 <NA>  <NA> filled lightblue   box
    # 5  5 <NA>  <NA> filled lightblue   box
    

    因为稍后我们将在create_graph 中使用此变量,我们希望将 1、2、3 中的每一个与 4 和 5 中的每一个连接起来。要为create_edge_df 构造正确的参数,我们将使用@987654328 @;那是因为,正如?create_edge_df 所说,

    from - 节点 ID 值的向量,边从该向量出站。 该 向量长度必须等于 to 向量的长度。

    to - 边缘传入的节点 ID 值向量。 向量长度必须等于起始向量的长度。

    所以,

    edges <- create_edge_df(from = rep(1:3, 2), to = rep(4:5, each = 3),
                            rel = "related", color = "black")
    create_graph(nodes_df = all_nodes, edges_df = edges, directed = TRUE)
    

    【讨论】:

    • @Zero,有帮助吗?
    • 我对此有一个后续问题。我已经尝试过您的解决方案,但它会在节点之间生成任意连接(这很正常,因为我没有添加它)。无论如何,您知道我们如何用您的解决方案得出这样的图表吗?我在问题中添加了图片
    • @Zero,首先,您应该从问题中删除该图表,因为它与原始问题无关。其次,您最初的问题和我的回答并不适合该图表。当图中存在某种二分性时,它们是合适的,具有两组清晰的顶点。您有一个简单的图表,应该简单地枚举所有边。即,使用edges &lt;- create_edge_df(from = c("a", "a", "a", ...), to = c("a", "b", "d", ...), ...) 等等。或者用 1 代替“a”,用 2 代替“b”,等等。
    猜你喜欢
    • 1970-01-01
    • 2016-12-03
    • 2022-11-09
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 2021-06-20
    • 2022-08-03
    • 2023-03-29
    相关资源
    最近更新 更多