【问题标题】:Creating a network graph with set node positions and concentrated edges with both circleheads and arrowheads in R在 R 中创建具有集节点位置和集中边的网络图,同时带有圆头和箭头
【发布时间】:2021-08-05 02:12:11
【问题描述】:

我一直在尝试找到一种方法来使用 DiagrammeR/GraphViz 在 R 中复制以下网络图格式,但没有成功(忽略 N1 上的粗黑箭头):https://i.stack.imgur.com/oHpQz.png

该图是有向图,如果边值为正,则某个方向上的每条边都以箭头 (-->) 结尾,如果边值为负,则以圆/点 (--o) 结尾。在一对节点(例如 N1 -- A1)之间,可以有一条边 N1 --> A1 和一条边 A1 --o N1,这些需要集中起来,使两条边看起来像一条带一端为箭头,另一端为圆头(如:o--->)。理想情况下,它们不能平行或看起来像两条边。

另一个要求是节点必须位于非常特定的位置,并且在边缘可能发生变化的整个模型模拟中始终保持在那里。根据我的尝试和我阅读的文档,这不可能以 DOT 格式执行,但可以使用 neoto 格式。

这是我遇到问题的地方。在neato 中,我可以通过定义节点的x,y 位置将节点精确地对齐到我想要的位置。但是,当我使用 concent = true 从两个平行的边缘创建 o---> 边缘时,只剩下一种类型的箭头。因此,应该看起来像 o---> 的边缘最终看起来像 ---> 或 o---。

这在 DOT 格式中不是问题,因为 concent = true 可以满足我的要求,但在 DOT 中我无法分配确切的节点位置。我尝试过使用节点等级来解决这个问题,但运气不佳。似乎将我想要的节点堆叠在同一等级内的不同等级中。同样,concentrate = true 似乎不适用于同一等级内的节点之间的边,因为它将它们作为两个单独的弯曲边 ---> 和 o--- 而不集中它们。

我需要这个工作的原因是因为我正在运行边缘发生变化的模型模拟,并且我需要生成数百个这样的图表。为了便于比较,节点需要保持在同一位置以保持一致性。

这是我使用neato格式所能想到的最接近的格式(节点以我想要的方式定位,但它没有显示正确的o--->对于所有黑色边缘减去自身边缘;红色边缘是真正的一个-方式链接):https://i.stack.imgur.com/YJBY7.jpg

如果只有边缘显示为正确的 o---> 格式,这将非常适合我的需要。如果您知道使用 DiagrammeR/GraphViz 甚至其他程序解决此问题的任何方法,我将不胜感激。谢谢!

【问题讨论】:

  • 请发布您的来源。 (将节点从一个图固定到另一个图的一种方法是使用层。存在错误,但有变通方法)
  • @sroush 我不确定如何...我对此真的很陌生。你是说源代码吗?在这种情况下,第一个是在 R 之外手动完成的,第二个是基于数据帧中的数据和很多步骤完成的......我主要使用 DiagrammeR 和 edge 和 node dfs 来使用 create_graph 函数创建它。跨度>

标签: r dot diagrammer neato r-graphviz


【解决方案1】:

您可能不需要专心。查看 arrowtaildirhttps://www.graphviz.org/doc/info/attrs.html#d:arrowtailhttps://www.graphviz.org/doc/info/attrs.html#d:dir)和 neato -n

digraph c {
  graph[label="can neato do the work?"]
  node[shape=circle]
  a [pos="100,100"]
  b [pos="200,100"]
  c [pos="300,100"]
  a->b [dir=both arrowtail=odot]
  c->c [dir=both arrowtail=odot arrowhead=none]
}

给予:

【讨论】:

  • 这很好,我不知道 dir=both 和 arrowtail。有什么方法可以让这项工作在理想的边缘 df 中发挥作用?我通常使用 DiagrammeR 的 create_graph(node_df, edge_df, ...) 函数来帮助我更轻松地动态创建图表。
  • 对不起,我不知道 DiagrammeR。
  • 好的,不用担心!我会找到一种动态实现这一点的方法。感谢您的帮助。
猜你喜欢
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 2012-06-09
  • 1970-01-01
  • 2017-10-14
  • 2016-11-23
相关资源
最近更新 更多