【问题标题】:Join nodes to edges in R graphviz将节点连接到 R graphviz 中的边
【发布时间】:2017-02-15 23:57:27
【问题描述】:

我想在 R 中使用 diagrammeR 绘制点图,其中一些节点的箭头指向边缘。

比如这张图

library(DiagrammeR)
grViz("
digraph PrimC{
  graph [layout = dot]
  node [shape = circle]
  A B
  A -> B [label = 'Rate']
  }")

我希望看起来像这样(手工编辑)。请注意,这些类型的图表通常用于显示速率何时受到其他事物数量的影响。

This answer 建议使用不可见节点可以实现这一点,但实际上并没有说明如何。它链接到this answer,它显示了如何将不可见节点用于稍微不同类型的图形,其中多条边在一个点处相遇,但不包括我正在寻找的边指向另一个中点的边边缘。

我已经尝试了许多不同的不可见节点和边的组合,但无法让它们中的任何一个接近我想要的。

这里以一个混乱的尝试为例

grViz("
digraph PrimC{
  graph [layout = dot]

  node [shape = circle]
  A B
  node[shape=none, width=0, height=0, label=''];
  p1
  node [shape = circle]
  B

  A -> p1 [label = 'Rate']
  p1 -> B
  B -> p1;
  {rank=same; A -> p1; B -> p1;}
  }")

有没有办法让它工作。如果有更好的解决方案,欢迎使用除 diagrammeR 和 graphviz 之外的其他方法提出建议。

【问题讨论】:

    标签: r graphviz


    【解决方案1】:

    我不确定这是否能正常工作,但对于这种情况,我会这样做:

    digraph PrimC{
    
      graph [layout = dot]
      rankdir = LR
      node[shape = circle]
      {rank=same 
        A 
        B
        p1[shape=none, width=0, height=0, label='']
      }
    
      A -> p1 [label = 'Rate', arrowhead=none]
      p1 -> B
      B:ne -> p1[constraint=no, arrowType=normal]
    
    }
    

    【讨论】:

    • 谢谢,在我的例子中效果很好。但我认为我的最小示例可能有点太微不足道了。对于更复杂的图形,边缘的路由变得非常复杂,并且边缘在不可见节点处发生急剧的不连续转弯(特别是如果您尝试指向弯曲而不是直线的边缘)。我会等着看是否有其他答案出现,但也许这是最好的。如果几天后没有更好的情况,我会接受这个。
    • 也许可以尝试像caretdashcaret.com/tag/graphviz这样的中间节点(不是直接从连接节点指向边缘)
    猜你喜欢
    • 2021-11-10
    • 2016-12-12
    • 2012-10-03
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    相关资源
    最近更新 更多