r-如何在DiagrammeR中删除_edge()后保持边缘颜色



我用DiagrammeR创建了一个图,首先设置了一个基本图,然后添加了节点和边。我已经在create_graph()内部的edge_attrs()中设置了边缘颜色属性。

如果我添加了一条没有颜色属性的新边,它会按预期使用预定义的颜色。但是,如果使用delete_edge()删除其中一条边,则所有边的常规边属性颜色都将消失。由于图形$edges_df不包含任何颜色信息,因此图形默认为黑色。

在使用add_node()时,有没有办法将边的颜色添加到图形$edges_df中?

我认为唯一可行的方法是添加没有边的节点,然后使用add_edge()单独添加边。

这里有一个可复制的例子:

library(DiagrammeR)
library(magrittr)
nodes <-
  create_nodes(
    nodes = "a",
    label = "A",
    type = "lower",
    style = "filled",
    shape = "circle",
    color = "orange",
    x = 5,
    y = 4
  )
graph_1 <-
  create_graph(
    nodes_df = nodes,
    graph_attrs = c(
      "layout = neato"
      ),
   edge_attrs = c(
      "relationship = requires",
      "arrowhead = normal",
      "color = 'lightgrey'"
      )
  )
render_graph(graph_1)
graph_1 %>%
  add_node(
    node = "b",
    from = "a",
    label = "B",
    style = "filled",
    shape = "circle",
    color = "orange",
    x = 5,
    y = 3
  ) ->
  graph_2
render_graph(graph_2)
new_edges <- create_edges(
  from = "a",
  to = "a"
)
graph_2 %>%
  add_edges(
    edges_df = new_edges
  ) ->
  graph_3
render_graph(graph_3)
graph_3 %>%
  delete_edge(
    to = "a",
    from = "a"
  ) ->
  graph_4
render_graph(graph_4)

这是我找到的最好的解决方案。简单地忽略一般属性并依赖edges_df。

library(DiagrammeR)
library(magrittr)
nodes <-
  create_nodes(
    nodes = "a",
    label = "A",
    type = "lower",
    style = "filled",
    shape = "circle",
    color = "orange",
    x = 5,
    y = 4
  )
graph_1 <-
  create_graph(
    nodes_df = nodes,
    graph_attrs = c(
      "layout = neato"
    )
  )
render_graph(graph_1)
graph_1 %>%
  add_node(
    node = "b",
    label = "B",
    style = "filled",
    shape = "circle",
    color = "orange",
    x = 5,
    y = 3
  ) %>%
  add_edges(
    edges_df = create_edges(
      from = "a",
      to = "b",
      color = "lightgrey"
    )
  ) ->
  graph_2
render_graph(graph_2)
graph_2 %>%
  add_edges(
    edges_df = create_edges(
      from = "a",
      to = "a",
      color = "lightgrey"
    )
  ) ->
  graph_3
render_graph(graph_3)
graph_3 %>%
  delete_edge(
    to = "b",
    from = "a"
  ) ->
  graph_4
render_graph(graph_4)

编辑:我现在已经查看了来自rich iannone的delete_edge()的代码。它基本上是基于原始的edges_df、nodes_df、directed和graph_attrs重新构建图,但它不包括node_attrs或edges_attrs,因此它们返回默认值。简单的解决方案是构建一个考虑到这一点的新函数,但我忽略了与create_graph是否存在冲突。

相关内容

  • 没有找到相关文章

最新更新