TikZ로 워드넷 그리기

TikZ로 워드넷 그리기

저는 TikZ를 사용하여 이런 워드넷을 그려보려고 합니다.

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

하지만 정말 무엇부터 시작해야 할지 모르겠어요. 이 그래프를 그리는 데 도움을 줄 수 있는 사람이 있나요? 안타깝게도 TikZ에 관한 책을 읽을 시간이 부족합니다. 오늘 내 숙제의 일부야 :(

답변1

강력한 힘을 이용한 가능성forest패키지:

\documentclass{article}
\usepackage{forest}

\begin{document}

\begin{forest}
[entity
  [inanimate-object
    [natural-object
      [geological-formation
        [natural-elevation [hill], tikz={
           \foreach \nodenam/\nodelabel in {!ul/0.000113,!u/0.000189}
             \node[anchor=east,xshift=-10pt] at (\nodenam.west) {$\nodelabel$};                              
            }
        ] 
        [shore [coast], tikz={
            \foreach \nodename/\nodelabel in {!ul/0.0000216,!u/0.0000836,!uu/0.00176,!uuu/0.0163,!uuuu/0.167,!ur/0.365}
                \node[anchor=west,xshift=10pt] at (\nodename.east) {$\nodelabel$};
          }
        ]
      ]
    ]
  ]
]
\end{forest}

\end{document}

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

답변2

트리 기반 솔루션

이에 대한 한 가지 가능한 해결책은 및 를 \usetikzlibrary{positioning}조합하는 것입니다 . 후자의 두 가지를 사용하면 원하는 트리와 같은 트리 구조를 그릴 수 있으며 라이브러리를 사용하면 단어에 상대적인 숫자를 배치하기 위해 다른 노드의 관점에서 노드를 정의할 수 있습니다.qtreetikz-qtreepositioning

이러한 솔루션에 대한 MWE는 다음과 같습니다.

\documentclass{article}

\usepackage{qtree}
\usepackage{tikz}
\usepackage{tikz-qtree,tikz-qtree-compat}
\tikzset{every tree node/.style={align=center, anchor=north}}
\usetikzlibrary{positioning}
\usepackage{fixltx2e}

\begin{document}

\begin{tikzpicture}[baseline]
\Tree
[.\node(entity){entity};
    [.\node(inanimate){inanimate object};
        [.\node(natural){natural object};
            [.\node(geological){geological formation};
                [.\node(naturalelev){natural elevation};
                    [.\node(hill){hill}; ]
                ]
                [.\node(shore){shore};
                    [.\node(coast){coast}; ]
                ] ] ] ] ]
\node [base right=2cm of entity] (1) {0.395} ;
\node [base left=2.5cm of entity] (align) {};
\node [below=0.6cm of 1] (2) {0.167};
\node [below=0.6cm of 2] (3) {0.0163};
\node [below=0.55cm of 3] (4) {0.00176};
\node [below=0.6cm of 4] (5) {0.0000836};
\node [below=0.5cm of 5] (6) {0.0000216};
\node [below=3.8cm of align] (7) {0.000113};
\node [below=.5cm of 7] (8) {0.0000189};
\end{tikzpicture}

\end{document}

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

이 솔루션의 단점은 추가로 정의된 노드를 수동으로 배치해야 한다는 것입니다. 누군가는 나보다 더 우아한 솔루션을 생각해낼 수도 있는데, 이는 이러한 다이어그램을 많이 만들어야 하는 경우 특히 좋을 것입니다. 그럼에도 불구하고 이 솔루션은 최소한 이 경우에 원하는 것을 제공하는 것 같습니다.


매트릭스 기반 솔루션

위에서 직접 언급한 문제, 즉 이러한 다이어그램 중 하나를 그려야 할 때마다(또는 크기를 조정할 때마다) 노드를 수동으로 정의해야 하는 문제를 피하는 또 다른 솔루션은 입니다 \usetikzlibrary{matrix}. 모든 정보를 행렬의 행과 열 안에 배치하면 명령을 사용하여 정보의 간격을 수동으로 지정해야 하는 문제를 피할 수 있습니다. \node이는 정보가 행렬의 행과 열에 저장되어 있기 때문에 자동으로 수행되기 때문입니다. .

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}

\begin{figure}[h!]
\begin{tikzpicture}[description/.style={fill=white,inner sep=2pt}]
\matrix (m) [matrix of nodes, row sep=1.5em,
column sep=0.3em, text height=1.5ex, text depth=0.25ex]
{
& & entity & & 0.395 \\ 
& & inanimate object & & 0.167 \\ 
& & natural object & & 0.0163 \\ 
& & geological formation & & 0.00176 \\ 
0.000113 & natural elevation & & shore & 0.0000836 \\ 
0.0000189 & hill & & coast & 0.0000216 \\ 
};

\path[-]    (m-1-3) edge (m-2-3)
            (m-2-3) edge (m-3-3)
            (m-3-3) edge (m-4-3)
            (m-4-3) edge (m-5-2)
            (m-5-2) edge (m-6-2)
            (m-4-3) edge (m-5-4)
            (m-5-4) edge (m-6-4);

\end{tikzpicture}
\end{figure}

\end{document}

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

관련 정보