森林环境中带有文字的箭头

森林环境中带有文字的箭头

我希望在森林环境中使用带有文本的箭头(箭头上方或下方)连接节点。不幸的是,我不知道如何在代码中实现它,因为每个箭头都应该有另一个文本。

我非常感谢大家的帮助。以下是我的代码:

\pgfkeys{/forest,
  my rounded corners/.append style={rounded corners=2pt},
}
\begin{forest}
  for tree={
      font=\sffamily,
      line width=1pt,
      draw=linecol,
      drop shadow,
      fit=rectangle,
      edge={thick, color=linecol, >={Triangle[]}, ->},
      where level=0{%
        l sep+=5pt,
        calign=child,
        calign child=2,
        inner color=ocre!70,
        outer color=ocre!70,
        align=center,
        my rounded corners,
        for descendants={%
          calign=first,
        },
      }{%
        where level=1{%
          inner color=ocre!30,
          outer color=ocre!30,
          my rounded corners,
          align=center,
          parent anchor=south west,
          tier=three ways,
          for descendants={%
            child anchor=west,
            parent anchor=west,
            align=left,
            anchor=west,
            inner color=ocre!10,
            outer color=ocre!10,
            edge path={
              \noexpand\path[\forestoption{edge}]
              (!to tier=three ways.parent anchor) |-
              (.child anchor)\forestoption{edge label};
            },
          },
        }{}%
      },
  }
  [a
    [b
      [b1
        [b2]
      ]
    ]
    [c
      [c1
        [c2
          [c3]
        ]
      ]
    ]
    [d
      [d1
        [d2]
      ]
    ]
    [e
      [e1
        [e2]
      ]
    ]
  ]
\end{forest}

答案1

我在这里从多个方面进行猜测:如何完成您的代码;您要做什么;问题是什么。我怀疑您在其他地方找到了此代码。如果是这样,您应该将其归因,并且有一个链接会很有帮助。(希望原始示例是完整的。)

我替换了颜色,因为我不知道你的颜色是如何定义的。我添加了库,并尝试尽可能简化事情。

思考你想要这样的东西:

可能的目标图像

如果是这样,那么我建议使用folderForestedges库中的样式,这使得绘制这种树时的生活变得更加轻松。

森林有一个内置的键,用于向边缘添加标签,称为edge labelarrow label是一个简单的包装器。

请注意,您不应在 或 的范围内使用,where因为隐式地使用了自身。使用或 将置于范围之外。在这里,我将第一个条件置于 的范围之外,并将第二个条件(需要在第一个条件的范围内)更改为。for treewherewherefor treeifwherefor treeif

如果相同,那么说inner color=<colour>, outer color=<colour>是没有意义的<colour>。它只会减慢编译速度。fill=<colour>在这种情况下会更好。

我改变了树的结构,因为它似乎确实包含 0、1 和 2 级节点,而不是包含更高级别的节点。显然,如果不是这种情况,您可以将其改回来。

\documentclass[border=10pt,multi,tikz]{standalone}
\usepackage[edges]{forest}
\usetikzlibrary{shadows,arrows.meta}
\begin{document}

\begin{forest}
  arrow label/.style={
    if level=1{
      edge label={node [midway, font=\scriptsize\sffamily, sloped, above] {#1}},
    }{
      edge label={node [midway, font=\scriptsize\sffamily, anchor=south west] {#1}},
    },
  },
  for tree={
    font=\sffamily,
    line width=1pt,
    draw=darkgray,
    drop shadow,
    edge={thick, color=darkgray, -{Triangle[]}},
    l sep'+=25pt,
  },
  where level=0{%
    fill=blue!70,
    rounded corners=2pt,
  }{%
    if level=1{%
      fill=blue!30,
      rounded corners=2pt,
      child anchor=north,
      for tree={
        grow'=0,
        folder,
        l sep'+=20pt,
      },
      for descendants={%
        fill=blue!10,
      },
    }{}%
  },
  before typesetting nodes={
    for tree={
      content/.wrap value=\strut #1,
    }
  }
  [a
    [b, arrow label=This Way
      [b1, arrow label=An Answer]
      [b2, arrow label=Best Answer]
    ]
    [c, arrow label=Best Way
      [c1, arrow label=A Connection]
      [c2, arrow label=A Way Station]
      [c3, arrow label=A Destination]
    ]
    [d, arrow label=No Way
      [d1, arrow label=By-The-By]
      [d2, arrow label=Side-By-Side]
    ]
    [e, arrow label=Lesser Evil
      [e1, arrow label=Lost In Space]
      [e2, arrow label=Lost In Time]
    ]
  ]
\end{forest}
\end{document}

相关内容