使用 xymatrix 建立圖表

使用 xymatrix 建立圖表

我嘗試使用 xymatrix 套件重現下圖: 在此輸入影像描述

這是我到目前為止所做的:

\documentclass{article}

\usepackage[all]{xy}

\begin{document}

\xymatrix@C=1cm{
    % First row
    \txt{FASE I\\Planejamento da Revisão} & 
    \txt{FASE II\\Realização da Revisão} &
    \txt{FASE III\\Documentação da Revisão} &
    \\
    % Second row
    *++[F-,]\txt{1. Especificar questões da\\ pesquisa} \ar[d] & 
    *++[F-,]\txt{3. Identificar e selecionar\\ pesquisas} \ar[d] & 
    *++[F-,]\txt{7. Analisar resultados} \ar[d]
    \\
    % Third row
    *++[F-,]\txt{2. Desenvolver protocolo da\\ revisão questões da pesquisa} \ar[ur] &
    *++[F-,]\txt{4. Avaliar a qualidade dos\\ estudos} \ar[d] &
    *++[F-,]\txt{8. Elaborar relatório}
    \\
    % Fourth row
    & *++[F-,]\txt{5. Extrair dados} \ar[d] & 
    \\
    % Fifth row
    & *++[F-,]\txt{6. Sintetizar dados} \ar[uuur] & 
    \\
}

\end{document}

這給了我這個: 在此輸入影像描述

如何使用 xymatrix 套件重現步驟 2 和 3 之間以及步驟 6 和 7 之間的箭頭,以便它轉動並且不通過其他步驟?

另外,如何將框架中的每一列“分組”,就像原始圖中一樣?

答案1

我知道你說你只想要 xymatrix 解決方案,但我是 tikz 黨派,我只是在我做了這個之後才注意到你這麼說。

\documentclass{article}
\usepackage{geometry}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usetikzlibrary{calc}
\usetikzlibrary{fit}

\begin{document}

\begin{tikzpicture}
\matrix (m) [
    matrix of nodes,
    row sep=0.4cm,
    column sep=1cm,
    % Set the size of the text boxes to be 4cm x 15pt
    every node/.style={text width=4cm, text depth=15pt},
    every node/.append code={ 
       % Check whether we're on the top row
       \ifnum\pgfmatrixcurrentrow=1\relax
          % Top row: align  center and don't draw rectangles
          \pgfkeysalso{align=center}
       \else
          % other rows: align left and "draw" the rectangles
          \pgfkeysalso{align=left,draw}
       \fi
    }
]{
% First row
% Need braces in order to use \\ as an explicit linebreak
{FASE I \\ Planejamento da Revisão} &
{FASE II\\ Realização da Revisão} &
{FASE III\\ Documentação da Revisão} \\
% Second row
1. Especificar questões da pesquisa &
3. Identificar e selecionar pesquisas &
7. Analisar resultados\\
% Third row
2. Desenvolver protocolo da revisãoa&
4. Avaliar a qualidade dos estudos&
8. Elaborar relatório\\
% Fourth row
& {5. Extrair dados}  &
\\
% Fifth row
% I need to force tikz to create empty nodes for fitting later
% But we don't want it to make empty rectangles, hence |[draw=none]|
|[draw=none]|& {6. Sintetizar dados} & |[draw=none]| 
\\};

\draw[->] (m-2-1) -- (m-3-1);
% Make the first zigzag path
\draw[->] (m-3-1.south)  -- ++(0,-0.5)
                   -| ($(m-2-2.west) - (0.5,0)$)
                   -- (m-2-2.west);
\draw[->] (m-2-2) -- (m-3-2);
\draw[->] (m-3-2) -- (m-4-2);
\draw[->] (m-4-2) -- (m-5-2);

% Make the second zigzag path
\draw[->] (m-5-2.east)  -- ++(0.5,0)
                   |- (m-2-3.west);

\draw[->] (m-2-3) -- (m-3-3);

% Draw the three "fit" rectangles
\node[rectangle,draw,fit=(m-1-1)(m-5-1)]{}; 
\node[rectangle,draw,fit=(m-1-2)(m-5-2)]{};
\node[rectangle,draw,fit=(m-1-3)(m-5-3)]{};

\end{tikzpicture}
\end{document}  

在此輸入影像描述

答案2

我能使用反引號得到的最好的結果是

\documentclass{article}

\usepackage[all]{xy}

\begin{document}

\xymatrix{
    % First row
    \txt{FASE I\\Planejamento da Revisão}
    \ar[d]
     & &
    \txt{FASE II\\Realização da Revisão} & &
    \txt{FASE III\\Documentação da Revisão} & &
    \\
    % Second row
    *++[F-,]\txt{1. Especificar questões da\\ pesquisa} \ar[d] & &
    *++[F-,]\txt{3. Identificar e selecionar\\ pesquisas} \ar[d] & &
    *++[F-,]\txt{7. Analisar resultados} \ar[d]
    \\
    % Third row
    *++[F-,]\txt{2. Desenvolver protocolo da\\ revisão questões da pesquisa}
    \ar`d[dr]`[ur]`[urr][urr] % \ar[ur]
     & &
    *++[F-,]\txt{4. Avaliar a qualidade dos\\ estudos} \ar[d] & &
    *++[F-,]\txt{8. Elaborar relatório}
    \\
    % Fourth row
    & & *++[F-,]\txt{5. Extrair dados} \ar[d] & &
    \\
    % Fifth row
    & & *++[F-,]\txt{6. Sintetizar dados}
    \ar`r[ruuu]`[rruuu][rruuu] % \ar[uuur]
    & &
}

\end{document}

在此輸入影像描述

我嘗試透過添加距適當矩陣條目的無頭箭頭 ( ) 偏移來獲取幀\ar@{-},但我無法弄清楚偏移語法。我想您可以使用“引入額外列”技巧將框架角放在矩陣條目處,但現在您要向矩陣添加兩行和六列,這開始顯得太多。

相關內容