Рисование сети Wordnet с помощью TikZ

Рисование сети Wordnet с помощью TikZ

Я пытаюсь использовать TikZ, чтобы нарисовать вот такую ​​сеть Wordnet

введите описание изображения здесь

но я правда не знаю с чего начать. Может кто-нибудь помочь мне нарисовать этот график? К сожалению, у меня нет времени читать книги о 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}сочетание с qtreeи tikz-qtree. Последние два позволят вам рисовать древовидные структуры, подобные тому дереву, которое вам нужно, а библиотека positioningпозволит вам определять узлы в терминах других узлов, чтобы размещать числа относительно слов.

Вот 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}

введите описание изображения здесь

Связанный контент