有沒有一些好的工具可以繪製帶有乳膠渲染標籤的二元樹?我需要自動完成樹節點放置,因為有太多標籤無法手動計算它們的放置。
更具體。我可以輕鬆控制資料的輸出格式。我不能做的是輸出為一種格式,我必須計算每個節點的座標。我想將資料輸出為可以計算圖形佈局的工具的格式。
編輯:我注意到下面的解決方案似乎不接受標籤中的數學。例如,下面的程式碼將不起作用,但如果我將美元放在標籤“x”周圍,那麼它就會起作用。這是一個問題,因為我的標籤是 2x2 矩陣。
\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{graphs,graphdrawing,arrows.meta}
\usegdlibrary{trees}
\begin{document}
\begin{tikzpicture}[>=Stealth]
\graph[binary tree layout]
{
root->{$x$->{}}
};
\end{tikzpicture}
\end{document}
答案1
最新版本PGF
有許多圖形繪製演算法(需要lualatex
),包括 Reingold–Tilford 方法的一個版本,並且可以輕鬆處理大量節點。
在最簡單的情況下,可以像這樣指定一棵樹:
\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{graphs,graphdrawing,arrows.meta}
\usegdlibrary{trees}
\begin{document}
\begin{tikzpicture}[>=Stealth]
\graph[binary tree layout]{
a -> {
b -> {
c -> {
d -> { e, f },
g
},
h -> { i, j }
},
k -> {
l -> {
m -> { n, o },
p -> { q, r }
},
s -> {
v -> {w, x},
y -> {z}
}
}
}
};
\end{tikzpicture}
\end{document}
還可以創建“圖形宏”,這意味著可以或多或少自動創建圖形規範,甚至可以使用lua
:
\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{graphs,graphdrawing,graphs.standard,arrows.meta}
\usegdlibrary{trees}
\begin{document}
\tikzgraphsset{%
levels/.store in=\tikzgraphlevel,
levels=1,
declare={full_binary_tree}{[
/utils/exec={
\edef\treenodes{%
\directlua{%
function treenodes(l)
if l == 0 then
return "/"
else
return "/ [layer distance=" .. l*10 .. "]-- {" .. treenodes(l-1) .. ", " .. treenodes(l-1) .. "}"
end
end
tex.print(treenodes(\tikzgraphlevel) .. ";")
}%
}
},
parse/.expand once=\treenodes
]}
}
\begin{tikzpicture}
\graph[binary tree layout, grow=down, sibling distance=5pt, significant sep=0pt, nodes={fill=red, draw=none, circle, inner sep=2.5pt, outer sep=0pt}]{
full_binary_tree [levels=7];
};
\end{tikzpicture}
\end{document}