[英]How to keep edge colours after delete_edge() in DiagrammeR
I've created a graph with DiagrammeR by first setting up a basic graph and then adding nodes and edges. 我通过首先设置基本图,然后添加节点和边,使用DiagrammeR创建了一个图。 I've set up the edge color attribute in the edge_attrs() inside create_graph().
我已经在create_graph()内部的edge_attrs()中设置了边缘颜色属性。
If I add a new edge without the color attribute it uses, as expected, the pre-defined colour. 如果我添加没有颜色属性的新边缘,则它按预期使用了预定义的颜色。 However, if I delete one of the edges with delete_edge() the general edge attribute color disappears for all edges.
但是,如果我使用delete_edge()删除边缘之一,则所有边缘的常规边缘属性颜色都会消失。 Since the graph$edges_df doesn't include any color information the graph defaults to black.
由于graph $ edges_df不包含任何颜色信息,因此该图默认为黑色。
Is there a way to add the colour of the edge to graph$edges_df when using add_node()? 使用add_node()时,是否可以将边缘的颜色添加到graph $ edges_df?
The only way I've thought would work is to add the node without the edge and then add the edge individually with add_edge(). 我认为可行的唯一方法是添加没有边缘的节点,然后使用add_edge()分别添加边缘。
Here a reproducible example: 这是一个可重现的示例:
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)
This is the best solution I've found. 这是我找到的最佳解决方案。 Simply ignoring the general attributes and relying on edges_df.
只需忽略常规属性并依靠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)
Edit: I've now looked at the code from rich-iannone for delete_edge(). 编辑:我现在看了来自rich-iannone的delete_edge()代码。 It basically re-builds the graph based on the original edges_df, nodes_df, directed and graph_attrs but it does not include the node_attrs or the edge_attrs, therefore they go back to the default.
它基本上基于原始的edge_df,nodes_df,directed和graph_attrs重新构建图形,但不包括node_attrs或edge_attrs,因此它们返回默认值。 The easy solution is to build a new function that takes that into consideration, but I ignore if there would be conflicts with create_graph.
一种简单的解决方案是构建一个考虑到这一点的新函数,但我忽略是否与create_graph发生冲突。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.