使用森林/树木和盒子,如何才能获得如附图所示的结果,使用森林绘图表

使用森林/树木和盒子,如何才能获得如附图所示的结果,使用森林绘图表

1.我想改变森林高度动态,像这样

for tree={
    grow=0,reversed, % tree direction
    parent anchor=east,child anchor=west, % edge anchors
edge path={none},
    minimum width=15mm, 
    draw=black,
    outer sep=0pt,% node shape
    l sep=0mm, % level distance
    s sep=0mm % level distance
} 

改成 在此处输入图片描述 喜欢 在此处输入图片描述

2.从 forest_doc 复制以下代码

\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage[left=1.00cm, right=1.00cm, top=1.00cm, bottom=1.00cm]{geometry}
\usepackage{forest}
\begin{document}
    \forestset{box/.style={
            draw, 
            no edge, 
            l=0, 
            l sep=0mm,
            s sep=0mm,
            calign=first, 
            anchor=base west,
            content format={\strut\forestoption{content}},
            if n children=0{}{
                after packing node={
                    minimum width/.pgfmath=
                    {s("!l")+max_x("!l")-s("!1")-min_x("!1")},
                    for children/.wrap pgfmath arg={s+={##1}}{0},
                    typeset node}}}}
    \begin{forest} 
        for tree={box} [total
        [home[saso[Download][TeX]][alja][joe]]
        [usr[bin][share]]]
    \end{forest}

\end{document}

答案1

这是对Zarko 的回答这样就避免了对如此多的维度进行硬编码。虽然代码有点复杂,但结果却更加灵活,因为可以更轻松地扩展和/或调整树,例如通过添加带有多行文本的附加层或节点。

\documentclass[tikz,border=10pt,multi]{standalone}
\usepackage{forest}
\usetikzlibrary{backgrounds}
% modified from Zarko's answer at https://tex.stackexchange.com/a/314181/
\begin{document}

\tikzset{
  L0/.style={fill=green},
  L1/.style={fill=orange},
  L2/.style={fill=yellow},
  L3/.style={fill=pink},
  basic/.style={line width=1pt, draw=white},
}

\begin{forest}
  for tree={
    grow'=0,
    parent anchor=children,
    child anchor=parent,
    edge path={none},
    minimum width=15mm,
    l sep=0pt,
    s sep=0pt,
    if n children=0{
      minimum height=8mm,
    }{},
  },
  before drawing tree={
    where n children=0{
      tikz+/.wrap pgfmath arg={
        \scoped[on background layer]{\path [L#1, basic] (.north west) rectangle (.south east);}
      }{level()},
    }{
      tikz+/.wrap pgfmath arg={
        \scoped[on background layer]{\path [L#1, basic] (.west |- !L.south) rectangle (.east |- !F.north);}
      }{level()},
    }
  }
  [AAAA
    [EEEE, minimum height=32mm
        [EEEE
            [YYYY]
            [AAAA]
        ]
        [DDDD
            [DDDD]
            [KKKK]
        ]
    ]
    [OOOO
        [PPPP
            [KKKK]
            [KKKK]
        ]
    ]
  ]
\end{forest}
\end{document}

输出

答案2

像这样:

在此处输入图片描述

我仍处于学习阶段forest,所以应该有更优雅的解决方案......

\documentclass[border=3mm]{standalone}
\usepackage{forest}

\begin{document}

\forestset{
    line width=1pt,
  L1/.style={fill=green,minimum height=48mm,yshift=4mm},
  L2/.style={fill=orange,minimum height=16mm},
  L3/.style={fill=yellow,minimum height=16mm},
  L4/.style={fill=pink,minimum height=8mm},
}

\begin{forest}
    for tree={
        grow=0,reversed, % tree direction
        parent anchor=east,child anchor=west, % edge anchors
    edge path={none},
        minimum width=15mm, draw=white,outer sep=0pt,% node shape
        l sep=0mm, % level distance
        s sep=0mm % level distance
    }
  [AAAA,L1
    [EEEE,L2,minimum height=32mm
        [EEEE,L3
            [YYYY,L4][AAAA,L4]
        ]
        [DDDD,L3
            [DDDD,L4][KKKK,L4]
        ]
    ]
    [OOOO,L2
        [PPPP,L3
            [KKKK,L4][KKKK,L4]
        ] 
    ]   
  ]
\end{forest}
\end{document}

我按照 MWE 中的说明更改了树,这样更有可能提供图像。

相关内容