Sammeln Sie mehrere Knoten in einer Knotenmatrix

Sammeln Sie mehrere Knoten in einer Knotenmatrix

Ich habe ein Größen-/Ausrichtungsproblem bei meinen letzten Knoten. Bildbeschreibung hier eingeben

Tatsächlich drucke ich den Knoten ungeschickt aus und verwende dann „Knoten anpassen“, um mehrere untergeordnete Knoten abzudecken.

Bildbeschreibung hier eingeben

Das ist nicht schön. Es muss etwas Intelligenteres und Natürlicheres geben.

MWE

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,shadows,fit,matrix}
\usepackage{duckuments}

\begin{document}

\def\myimageA{\includegraphics[width=2cm]{example-image-duck}}
\def\myimageB{\includegraphics[width=1cm]{example-image-duck}}
\def\d{\textbf{Selling group}}
\def\e{\textbf{Investors}}


\begin{tikzpicture}[
        font=\sffamily,
        level1/.style={
            rounded corners, 
            fill=#1,
            inner sep=5pt,
            text=black,
            text centered,
            opacity = 0.5,
            text opacity = 1,
        },
        level2/.style={
            rounded corners, 
            fill=#1,
            inner sep=7pt,
            text=black,
            text centered,
            opacity = 0.5,
            text opacity = 1,
        },
        rectnode/.style={
            rounded corners, 
            fill=#1,
            inner sep=7pt,
            text=black,
            text centered,
            text opacity = 1,
        },
        level4/.style={
            fill=#1,
            draw=gray,
            inner sep=5pt,
            text=black,
            text width=1.5cm, 
            text centered,
            font=\tiny,
            anchor=north,
            opacity = 0.5,
            text opacity = 1,
        },
        myline/.style={
            draw=gray,
            opacity=0.7,
            arrows = {-latex},
            line width=1pt,
        },
    ]
    \matrix[
        matrix of nodes, 
        column sep=0.5ex, 
        row sep=3ex, 
        row 1/.style={nodes={level1={gray}}},
        row 2/.style={nodes={level2={gray}}},
        row 3/.style={nodes={rectnode={gray}}},
        row 4/.style={nodes={level4={gray}}},
        row 5/.style={nodes={rectnode={gray}}},
    ] (m) {
    &       &       & {\myimageA}               \\
    &       &       & {\myimageB}                   \\
    & {\myimageB}   &       & {\myimageB}   &       & {\myimageB}   \\
{\d}& {\d}  & {\d}  & {\d}  & {\d}  & {\d}  \\
x   & x     & x     & x     & x     & {\e}  \\  % <- I clumsily put the nodes like this
    }; 
        
    % I certainly should use a \path but not confortable with its syntax.
    \draw[myline] (m-1-4.south) -- (m-2-4);
    \draw[myline] (m-2-4.west) -| (m-3-2);   
    \draw[myline] (m-2-4.east) -| (m-3-6);   
    \draw[myline] (m-2-4.190) -| (m-4-3);    
    \draw[myline] (m-2-4.south) -| (m-3-4);  
    \draw[myline] (m-3-2.west) -| (m-4-1);   
    \draw[myline] (m-3-2.south) -| (m-4-2);      
    \draw[myline] (m-3-4.south) -| (m-4-4);      
    \draw[myline] (m-3-4.east) -| (m-4-5);           
    \draw[myline] (m-3-6.south) -- (m-4-6);              
    \draw[myline] (m-3-6.south) -- (m-4-6);                  
    
    \draw[myline] (m-4-1.south) -- (m-5-1);                  
    \draw[myline] (m-4-2.south) -- (m-5-2);                  
    \draw[myline] (m-4-3.south) -- (m-5-3);                  
    \draw[myline] (m-4-4.south) -- (m-5-4);                  
    \draw[myline] (m-4-5.south) -- (m-5-5);                  
    \draw[myline] (m-4-6.south) -- (m-5-6);                  
    

    \node[align=center,rectnode={gray},inner sep=0pt,fit=(m-5-1)(m-5-2)] {\e};
    \node[align=center,rectnode={gray},inner sep=0pt,fit=(m-5-3)(m-5-5)] {\e};

\end{tikzpicture}
\end{document}

Antwort1

Die Syntax zum Zeichnen einer senkrechten Linie von einem vorhandenen Knoten zur Nordkante (nicht zur Mitte der Nordkante) eines vorhandenen Knotens lautet

\draw (node1) -- (node1.south|-node2.north)

Entfernen Sie also die letzte Zeile Ihrer Matrix und platzieren Sie die „Investoren“-Knoten dort, wo Sie sie haben möchten. Ich habe sie 1.2cmunter die letzte Zeile Ihrer Matrix gesetzt. Der erste befindet sich unter dem m-4-2Knoten; der zweite unter dem Mittelpunkt von m-4-4und m-4-5.

Dann der Befehl

\draw[myline] (m-4-1.south) -- (m-4-1.south|-new1.north);

(m-4-1.south)wird von direkt nach unten zum Nordrand von gezeichnet (new1), was ich den ersten „Investor“-Knoten genannt habe.

Bildbeschreibung hier eingeben

\matrix[
    matrix of nodes, 
    column sep=0.5ex, 
    row sep=3ex, 
    row 1/.style={nodes={level1={gray}}},
    row 2/.style={nodes={level2={gray}}},
    row 3/.style={nodes={rectnode={gray}}},
    row 4/.style={nodes={level4={gray}}},
    row 5/.style={nodes={rectnode={gray}}},
] (m) {
&       &       & {\myimageA}               \\
&       &       & {\myimageB}                   \\
& {\myimageB}   &       & {\myimageB}   &       & {\myimageB}   \\
{\d}& {\d}  & {\d}  & {\d}  & {\d}  & {\d}  \\
%x   & x     & x     & x     & x     & {\e}  \\  % <- I clumsily put the nodes like this
}; 
        
\draw[myline] (m-1-4.south) -- (m-2-4);
\draw[myline] (m-2-4.west) -| (m-3-2);   
\draw[myline] (m-2-4.east) -| (m-3-6);   
\draw[myline] (m-2-4.190) -| (m-4-3);    
\draw[myline] (m-2-4.south) -| (m-3-4);  
\draw[myline] (m-3-2.west) -| (m-4-1);   
\draw[myline] (m-3-2.south) -| (m-4-2);      
\draw[myline] (m-3-4.south) -| (m-4-4);      
\draw[myline] (m-3-4.east) -| (m-4-5);           
\draw[myline] (m-3-6.south) -- (m-4-6);              
\draw[myline] (m-3-6.south) -- (m-4-6);  

\node[align=center, rectnode={gray}, minimum width=5cm] at ([yshift=-1.2cm]m-4-2)(new1){\e}; 
\node[align=center, rectnode={gray}, minimum width=3.5cm]at ([yshift=-1.2cm]$.5*(m-4-4)+.5*(m-4-5)$)(new2){\e};
\node[align=center, rectnode={gray}]at ([yshift=-1.2cm]m-4-6)(new3){\e};

\draw[myline] (m-4-1.south) -- (m-4-1.south|-new1.north);                  
\draw[myline] (m-4-2.south) -- (new1);                  
\draw[myline] (m-4-3.south) -- (m-4-3.south|-new1.north);                  
\draw[myline] (m-4-4.south) -- (m-4-4.south|-new2.north);                  
\draw[myline] (m-4-5.south) -- (m-4-5.south|-new2.north);                  
\draw[myline] (m-4-6.south) -- (new3); 

verwandte Informationen