tikz 트리 노드 및 레이블, 오프셋 및 경사에 대한 도움이 필요합니다.

tikz 트리 노드 및 레이블, 오프셋 및 경사에 대한 도움이 필요합니다.

다음과 같이 그려야 합니다.

내 문제는 검은 점 위치, 즉 노드 S와 M과 레이블 위치이며 숫자 레이블도 좋지 않습니다.

X 노드는 Cabonated_Drinks와 Coke 사이의 가장자리가 아닌 Coke 노드 옆에 있습니다.

여기에 이미지 설명을 입력하세요

이것이 내가 얻은 것입니다:

\documentclass{standalone}
\usepackage{tikz}
\usepackage{amsmath}

\tikzset{
  solid node/.style={circle,draw,inner sep=1.2,fill=black},
  hollow node/.style={circle,draw,inner sep=1.2},
}

\begin{document}
    \begin{tikzpicture}[font=\footnotesize]
    \tikzset{
        level 1/.style={level distance=15mm,sibling distance=45mm},
        level 2/.style={level distance=15mm,sibling distance=30mm},
        level 3/.style={level distance=15mm,sibling distance=15mm},
        level 4/.style={level distance=15mm,sibling distance=10mm},
    }

    \node(A)[hollow node,label=above:{ALL}]{}
    child {
        %node(B)[hollow node,label=left:{Carbonated Drinks}]{}
        node(B)[hollow node,label={[align=left]left:Carbonated\\Drinks}]{}
        child {node(D)[hollow node, label=below:{Coke}]{}
            edge from parent{
                node[solid node, left, label=left:{X}, at end]{}
                node[right]{1}
            }
        }
        child {node(E)[hollow node, label=below:{Pepsi}]{}
            edge from parent{
                node[left]{1}
                node[solid node, right, near start, label=right:{T}]{}
            }
        }
        edge from parent{
            node[solid node, left, near start, label=left:{S}]{}
            node[solid node, right, near start, label=right:{M}]{}
        }
        edge from parent{
            node[right]{1}
        }
    }
    child {
        node(C)[hollow node,label=right:{Coffee}]{}
        child {
            node(F)[hollow node, label=below:{Mocca}]{}
            edge from parent{
                node[right]{1}
            }
        }
        child {
            node(G)[hollow node, label=below:{Nescaffe}]{}
            edge from parent{
                node[left]{1}
            }
        }
        edge from parent{
            node[left]{1}
        }
    };
    \end{tikzpicture}
\end{document}

나에게 다음과 같은 이미지를 제공하는 것은 무엇입니까? 여기에 이미지 설명을 입력하세요

미리 감사드립니다.

답변1

여기에 유용할 수 있는 두 개의 키가 있습니다: posshift. 이것들을 이용해서 얻었어요

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{amsmath}

\tikzset{
  solid node/.style={circle,draw,inner sep=1.2,fill=black},
  hollow node/.style={circle,draw,inner sep=1.2},
}

\begin{document}
    \begin{tikzpicture}[font=\footnotesize]
    \tikzset{
        level 1/.style={level distance=15mm,sibling distance=45mm},
        level 2/.style={level distance=15mm,sibling distance=30mm},
        level 3/.style={level distance=15mm,sibling distance=15mm},
        level 4/.style={level distance=15mm,sibling distance=10mm},
    }

    \node(A)[hollow node,label=above:{ALL}]{}
    child {
        %node(B)[hollow node,label=left:{Carbonated Drinks}]{}
        node(B)[hollow node,label={[align=left,xshift=1.5em]135:Carbonated\\Drinks}]{}
        child {node(D)[hollow node, label=below:{Coke}]{}
            edge from parent{
                node[solid node,pos=0.95,xshift=-0.5em,left, label=left:{X}]{}
                node[pos=0.6,above left]{1}
            }
        }
        child {node(E)[hollow node, label=below:{Pepsi}]{}
            edge from parent{
                node[pos=0.6,below left]{1}
                node[solid node, right, pos=0.4, label=right:{T}]{}
            }
        }
        edge from parent{
            node[solid node, left, pos=0.35,shift={(120:2pt)}, label=120:{S}]{}
            node[solid node, right, pos=0.35,shift={(-60:2pt)}, label=-60:{M}]{}
            node[pos=0.6,above left]{1}
            }
    }
    child {
        node(C)[hollow node,label=right:{Coffee}]{}
        child {
            node(F)[hollow node, label=below:{Mocca}]{}
            edge from parent{
                node[pos=0.6,above left]{1}
            }
        }
        child {
            node(G)[hollow node, label=below:{Nescaffe}]{}
            edge from parent{
                node[pos=0.6,above right]{1}
            }
        }
        edge from parent{
            node[pos=0.6,above right]{1}
        }
    };
    \end{tikzpicture}
\end{document}

여기에 이미지 설명을 입력하세요

장기적으로는 숲으로 전환하면 이익을 얻을 수 있습니다.`

답변2

@marmot이 말한 것처럼 레이블과 노드와 함께 xshift 및 yshift를 올바르게 사용하여 해결되었습니다 ...

개선된 코드는 다음과 같습니다.

\documentclass{standalone}
\usepackage{tikz}
\usepackage{amsmath}

\tikzset{
  solid node/.style={circle, draw, inner sep=2, fill=black, line width=1pt},
  hollow node/.style={circle, draw, inner sep=2, line width=1pt },
}

%child{node(l1)[hollow node, label=below:{D}]{}

\begin{document}
    \begin{tikzpicture}[font=\footnotesize]
    \tikzset{
        level 1/.style={level distance=15mm,sibling distance=45mm, line width=1pt},
        level 2/.style={level distance=15mm,sibling distance=30mm},
        level 3/.style={level distance=15mm,sibling distance=15mm},
        level 4/.style={level distance=15mm,sibling distance=10mm},
    }

    \node(A)[hollow node,label=above:{ALL}]{}
    child {
        %node(B)[hollow node,label=left:{Carbonated Drinks}]{}
        node(B)[hollow node,label={[align=left]left:Carbonated\\Drinks}]{}
        child {node(D)[hollow node, label=below:{Coke}]{}
            edge from parent{
                node[solid node, xshift=-1pt, yshift=+3pt, left, label=left:{X}, at end]{}
                node[right]{1}
            }
        }
        child {node(E)[hollow node, label=below:{Pepsi}]{}
            edge from parent{
                node[left]{1}
                node[solid node, rotate=+45pt, right, near start, label={[xshift=-1.0pt, yshift=-9.0pt]right:T}]{}
            }
        }
        edge from parent{
            node[solid node, rotate=-45, left, near start,label={[xshift=2.0pt, yshift=-7.0pt]left:S}]{}
            node[solid node, rotate=-45, right, near start, label={[xshift=-2.0pt, yshift=7.0pt]right:M}]{}
        }
        edge from parent{
            node[right]{1}
        }
    }
    child {
        node(C)[hollow node,label=right:{Coffee}]{}
        child {
            node(F)[hollow node, label=below:{Mocca}]{}
            edge from parent{
                node[right]{1}
            }
        }
        child {
            node(G)[hollow node, label=below:{Nescaffe}]{}
            edge from parent{
                node[left]{1}
            }
        }
        edge from parent{
            node[left]{1}
        }
    };
    \end{tikzpicture}
\end{document}

내가 얻은 것 :

여기에 이미지 설명을 입력하세요

모두 감사합니다 @marmot, @ferahfeza

관련 정보