使用 Forest 包的图表

使用 Forest 包的图表

我想使用 Forest 包创建如下所示的树形图。我知道可以使用 Tikz 包生成这棵树,但我想练习和学习 Forest 包。

那么,有人可以帮忙吗?

http://www.texample.net/media/tikz/examples/PNG/work-breakdown-structure.png

答案1

我也在学习forest.这是我的尝试

\documentclass{article}
\usepackage{forest}
\usetikzlibrary{shadows,arrows.meta}

\tikzset{parent/.style={align=center,text width=2cm,fill=green!20,rounded corners=2pt},
    child/.style={align=center,text width=2.8cm,fill=green!50,rounded corners=6pt},
    grandchild/.style={fill=pink!50,text width=2.3cm}
}
\begin{document}
\begin{forest}
for tree={%
    thick,
    drop shadow,
    l sep=0.6cm,
    s sep=0.8cm,
    node options={draw,font=\sffamily},
    edge={semithick,-Latex},
    where level=0{parent}{},
    where level=1{
        minimum height=1cm,
        child,
        parent anchor=south west,
        tier=p,
        l sep=0.25cm,
        for descendants={%
            grandchild,
            minimum height=0.6cm,
            anchor=150,
            edge path={
                \noexpand\path[\forestoption{edge}]
                (!to tier=p.parent anchor) |-(.child anchor)\forestoption{edge label};
            },
        }
    }{},
}
[Drawing\\diagrams
    [Defining node and arrow styles
        [Setting shape
            [Choosing color
                [Adding shading]
            ]
        ]
    ]
    [Positioning the nodes
        [Using a Matrix
            [Relatively
                [Absolutely
                    [Using overlays]
                ]
            ]
        ]
    ]
    [Drawing arrows between nodes
        [Default arrows
            [Arrow library
                [Resizing tips
                    [Shortening
                        [Bending]
                    ]
                ]
            ]
        ]
    ]
]
\end{forest}
\end{document}

在此处输入图片描述

答案2

因为据说熟能生巧。(但请注意,我相信这只适用于那些实践的人,如果它确实适用的话。)

我曾经cantarell尝试捕捉原始图表中的字体感觉,即让树比 Computer Modern 提供的默认树看起来更随意一些。颜色大多是使用 的xcolor列表选择的x11names

这里唯一真正的技巧是意识到粉色节点需要占据多个级别(每个子树的每个节点一个级别),并使节点和边缘样式对不同级别敏感。您可以逐个节点传递自定义样式定义,但按级别进行传递可以更轻松地维护和调整代码。

我使用了轻微的阴影来尝试为节点增加一点深度。但是,如果您不喜欢,可以轻松将其删除。

\PassOptionsToPackage{x11names,rgb}{xcolor}
\documentclass[border=5pt,tikz]{standalone}

\usepackage{forest}
\usetikzlibrary{arrows.meta, shapes.geometric, calc, shadows}
\usepackage[default]{cantarell}
\usepackage[T1]{fontenc}
\colorlet{linecol}{black!75}

\begin{document}
\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=PaleGreen1!80,
        outer color=PaleGreen1,
        align=center,
        my rounded corners,
        for descendants={%
          calign=first,
        },
      }{%
        where level=1{%
          inner color=Green2!80,
          outer color=Green2,
          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=MistyRose1!80,
            outer color=MistyRose1,
            edge path={
              \noexpand\path[\forestoption{edge}]
              (!to tier=three ways.parent anchor) |-
              (.child anchor)\forestoption{edge label};
            },
          },
        }{}%
      },
  }
  [Drawing\\Diagrams
    [Defining node\\and arrow styles
      [Setting shape
        [Choosing colour
          [Adding shading]
        ]
      ]
    ]
    [Positioning\\the nodes
      [Using a matrix
        [Absolutely
          [Relatively
            [Using overlays]
          ]
        ]
      ]
    ]
    [Drawing arrows\\between nodes
      [Default arrows
        [Arrow library
          [Re-sizing tips
             [Shortening
               [Bending]
             ]
          ]
        ]
      ]
    ]
  ]
\end{forest}
\end{document}

实践

我不确定这样绘制树的优点。我不太喜欢圆角和直角的组合,尤其是考虑到当在第 1 级节点的西南角和第 2 级节点之间绘制边缘时会导致间隙。我也不清楚颜色。有两种不同的绿色和 1 种粉红色。这重要吗?浅绿色和深绿色是否相关,但不如粉红色那么紧密?我知道浅绿色是主要类别,深绿色是子类别。但粉红色似乎并非都是独特或明确界定的子子类别。(为什么选择箭头样式与绘制箭头无关?)但也许我只是在过度思考 MWE......

相关内容