如何在 Tikz 中繪製以下框圖

如何在 Tikz 中繪製以下框圖

我是 Tikz 新手。請幫我。我對使用下面的、上面的樣式感到困惑。

我努力了。 MWE如下。我希望該圖與下圖所示類似。

\documentclass[conference]{IEEEtran}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usetikzlibrary{shapes,arrows} 

\begin{document}
\begin{figure}[h]
\centering
% Define block styles
\tikzstyle{block} = [rectangle, draw, fill=blue!20, text width=5em, text centered, minimum height=4em]
\tikzstyle{line} = [draw, -latex']

\begin{tikzpicture}[node distance = 2cm, auto]
% Place nodes
\node [block] (soa) {ST};
\node [block] (slt) {slyt};
\node [block] (sclt) {sclt};
\node [block] (gt) {governance testing};
\node [block] (ilt) {ilt};
\node [block] (olt) {olt};
\node [block] (slt1) {slt1};
% Draw edges
\draw [->] (soa) -- (slt);
\draw [->] (soa) -- (slt1);
\draw[->] (soa) -| (gt);
\end{tikzpicture}
\caption{Testing Domains.}
\label{f1}
\end{figure}  
\end{document}

在此輸入影像描述

答案1

編輯:

透過該庫,您可以根據需要positioning調整節點之間的距離(或特定節點座標,例如.south、等)。.north這裡我定義了相對於節點的所有距離soa,但當然定義其他節點之間的距離可能比較簡單。

在此輸入影像描述

這是產生您想要的框圖的程式碼。我\tikzstyle用更好的命令替換了命令\tikzset(參見應該使用 \tikzset 或 \tikzstyle 來定義 TikZ 樣式嗎?),並稍微重新排列了程式碼。

\documentclass[conference]{IEEEtran}
\usepackage[a4paper]{geometry}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usetikzlibrary{shapes,arrows} 

% Define block styles
\tikzset{block/.style={rectangle,draw,fill=blue!20,text width=5em, text centered, minimum height=4em},
        line/.style={draw,-latex'}}

\begin{document}
\begin{figure}
    \centering
    \begin{tikzpicture}[node distance = 2cm, auto]
        % Place nodes
        \node [block] (soa) {ST};
        \node [block,below left=2cm and 3cm of soa] (gt) {Governance Testing};
        \node [block,below left=4cm and 1cm of soa] (slt) {SLT};
        \node [block,below=5cm of soa] (sclt) {SCLT};
        \node [block,below right=5cm and 1cm of soa] (ilt) {Ilt};
        \node [block,below right=4cm and 4cm of soa] (olt) {olt};
        \node [block,below right=2cm and 6cm of soa] (slt1) {slt1};
        % Draw edges
        \draw [->] (soa.south) --++ (0,-1) -| (slt.north);
        \draw[->] (soa.south) --++ (0,-1) -| (gt.north);
        \draw[->] (soa.south) --++ (0,-1) -| (ilt.north);
        \draw[->] (soa.south) --++ (0,-1) -| (sclt.north);
        \draw[->] (soa.south) --++ (0,-1) -| (olt.north);
        \draw [->] (soa.south) --++ (0,-1) -| (slt1.north);
    \end{tikzpicture}
    \caption{Testing Domains.}
    \label{f1}
\end{figure}
\end{document}

舊答案:

這是幫助您入門的程式碼。我不在電腦上,所以現在無法正確回答。

但是,您可以使用positioning已載入的程式庫:

\documentclass[conference]{IEEEtran}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usetikzlibrary{shapes,arrows} 

\begin{document}
\begin{figure}[h]
\centering
% Define block styles
\tikzstyle{block} = [rectangle, draw, fill=blue!20, text width=5em, text centered, minimum height=4em]
\tikzstyle{line} = [draw, -latex']

\begin{tikzpicture}[node distance = 2cm, auto]
% Place nodes
\node [block] (soa) {ST};
\node [block,below left=4cm and 1cm of soa] (slt) {slyt};
\node [block,below=5cm of soa] (sclt) {sclt};
\node [block,below left=2cm and 3cm of soa] (gt) {governance testing};
\node [block,below right=5cm and 1cm of soa] (ilt) {ilt};
\node [block] (olt) {olt};
\node [block] (slt1) {slt1};
% Draw edges
\draw [->] (soa.south) --++ (0,-1) -| (slt.north);
\draw [->] (soa.south) -- (slt1);
\draw[->] (soa.south) --++ (0,-1) -| (gt);
\draw[->] (soa.south) --++ (0,-1) -| (ilt);
\draw[->] (soa.south) --++ (0,-1) -| (sclt);
\end{tikzpicture}
\caption{Testing Domains.}
\label{f1}
\end{figure}
\end{document}

答案2

帶有庫的替代解決方案matrix

\documentclass[conference]{IEEEtran}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, matrix, positioning}

\begin{document}
    \begin{figure}[h]
\centering
\begin{tikzpicture}
% nodes
\matrix (m) [matrix of nodes,
             %nodes in empty cells,
             nodes={draw, minimum width=4em, minimum height=1em, inner sep=2mm},
             row sep = 4ex, column sep= 1ex]
{   
    &       & ST    &       &       &       \\
GT  &       &       &       &       & SLTI  \\
    & SLT   &       &       & OLT   &       \\
    &       & SCLT  & IT    &       &       \\
};
% auxiliary coordinate
\coordinate[below=2ex of m-1-3.south] (a);
% edges
\draw   (m-1-3) -- (a)
        (m-2-1 |- a) -- (a -| m-2-6);
\draw[-Straight Barb]   (a -| m-2-1) edge (m-2-1)
                        (a -| m-2-6) edge (m-2-6)
                        (a -| m-3-2) edge (m-3-2)
                        (a -| m-3-5) edge (m-3-5)
                        (a -| m-4-3) edge (m-4-3)
                        (a -| m-4-4)  to  (m-4-4);

\end{tikzpicture}
\caption{Testing Domains.}
\label{f1}
\end{figure}
\end{document}

在此輸入影像描述

附錄: 考慮到圖像可以在不進行任何縮放的情況下適合列寬,第一行和第二行之間的距離更大並且稍微更“花哨”:

在此輸入影像描述

\documentclass[conference]{IEEEtran}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, calc, matrix, shadows}% changed

\usepackage{lipsum}% added for simulating text in document
\begin{document}
\lipsum[1]% added, don't use in real document
    \begin{figure}[ht]
    \centering
\begin{tikzpicture}
% nodes
\matrix (m) [matrix of nodes,
             nodes={draw, fill=white, drop shadow,% changed
                    minimum width=3.5em, inner ysep=2mm},% changed
             row sep = 1ex, column sep = 1.5ex,% changed (reduced)
            ]
{
    &       & ST    &       &       &       \\[5ex]% added [5ex]
GT  &       &       &       &       & SLTI  \\
    & SLT   &       &       & OLT   &       \\
    &       & SCLT  & IT    &       &       \\
};
% auxiliary coordinate
\path (m-1-3.south) -- coordinate (a) (m-1-3.south |- m-2-1.north);% changed
% edges
\draw   (m-1-3) -- (a)
        (m-2-1 |- a) -- (a -| m-2-6);
\draw[-Straight Barb]   (a -| m-2-1) edge (m-2-1)
                        (a -| m-2-6) edge (m-2-6)
                        (a -| m-3-2) edge (m-3-2)
                        (a -| m-3-5) edge (m-3-5)
                        (a -| m-4-3) edge (m-4-3)
                        (a -| m-4-4)  to  (m-4-4);

\end{tikzpicture}
\caption{Testing Domains.}
\label{f1}
    \end{figure}
\lipsum% added, don't use in real document
\end{document}

與第一個 MWE 相比,上述 MWE 中的變更在程式碼中以註解進行了註解。

相關內容