Preciso desenhar algo assim:
Meu problema é a posição dos pontos pretos, ou seja, os nós S e M e a posição dos rótulos, e os rótulos dos números também não parecem bons.
O nó X está ao lado do nó Coke, não na borda entre Cabonated_Drinks e Coke.
isso é o que eu consegui:
\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}
O que me dá uma imagem como esta:
Desde já, obrigado.
Responder1
Existem duas chaves que podem ser úteis aqui: pos
e shift
. Usando isso, consegui
\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}
No longo prazo, você pode se beneficiar com a mudança para a floresta.`
Responder2
RESOLVIDO usando xshift e yshift corretamente com rótulos e nós como @marmot diz ...
Aqui está o código melhorado:
\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}
Eu obtive:
obrigado a todos @marmot, @ferahfeza