在 tikz 图片中将文本置于箭头上方和下方的中心

在 tikz 图片中将文本置于箭头上方和下方的中心

我正在尝试绘制流程图,但在获取正确细节方面遇到了一些麻烦。目前,我的代码如下所示:

% Define block styles
\tikzstyle{block} = [rectangle, draw, fill=red!40, 
    text width=6em, text centered, rounded corners, minimum height=3em]
\tikzstyle{arrow} = [draw, -latex']

\begin{figure}[!h]
\centering
\begin{tikzpicture}[node distance = 5cm, auto]
    % Place nodes
    \draw ++(0,0) node [block] (signal) {Señal temporal};
    \draw ++(4,0) node [block] (FFT)  {Transformada rápida de Fourier};
    \draw ++(9,0) node [block] (MSF)  {Mapeo a escala de Mel};
    \draw ++(13.5,-1.5) node [block] (Log)  {Logaritmo de la potencia};
    \draw ++(9,-3) node [block] (DCT) {Transformada Coseno Discreta};
    \draw ++(4,-3) node [block] (MFCC) {Descriptores MFCC};

    % Draw edges
    \path [arrow] (signal) -- (FFT);
    \path [arrow] (FFT) -- node {espectro} (MSF) ;
    \draw[arrow] (MSF.east) -- node [above] {espectro} node [below] {de Mel} ++(1.5,0)   -|  (Log.north);    
    \draw[arrow] (Log.south) --  ++(0,-0.86)   --  (DCT.east);    
    \path [arrow] (DCT) -- (MFCC) ;
    
   
\end{tikzpicture}
\caption[MFCC]{Diagrama en bloques del cálculo de las MFCC para un frame.}
\label{MFCC}
\end{figure}

输出如下内容:

我的 tikz 图片是什么样子的

在第一行,最右边的箭头上方和下方有一个文字“espectro de Mel”,我希望它以这样的方式居中显示在右侧:

我想要实现的目标

当然,我可以使用图像编辑器轻松完成此操作,但我认为这可以通过代码完成。

感谢您的回答,我也很乐意接受有关图像其余部分的任何建议。

答案1

一些评论:

  • tikzset{stylename/.style={}}建议超过\tikzstyle
  • 使用库的语法,节点相对于彼此定位positioning
  • 右下方的线用 绘制(node1) -| (node2),在本例中将pos=0.25位于第一个节点和角的中间。

    在您的原始代码中,您有(MSF.east) -- <nodes are here> ++(1.5,0) -| (Log.north),因此节点位于 的右边缘和右侧MSF一个点单位之间的中间。然后该线继续水平延伸,直到到达 的 x 坐标,然后转向并向下延伸到。1.5MSFLog.northLog

  • 虽然它仍然有效,但该arrows库已被弃用,取而代之的是arrows.meta。进行这种切换需要对箭头尖端的规范进行一些小的更改。

在此处输入图片描述

\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\tikzset{
     block/.style={rectangle, draw, fill=red!40, text width=6em,
                   text centered, rounded corners, minimum height=3em},
     arrow/.style={-{Stealth[]}}
     }
\usetikzlibrary{positioning,arrows.meta}
\begin{document}
\begin{tikzpicture}
    \node [block] (signal) {Señal temporal};
    \node [block,right=of signal] (FFT)  {Transformada rápida de Fourier};
    \node [block,right=2cm of FFT] (MSF)  {Mapeo a escala de Mel};
    \node [block,below right=0.2cm and 1cm of MSF] (Log)  {Logaritmo de la potencia};
    \node [block,below left=0.2cm and 1cm of Log] (DCT) {Transformada Coseno Discreta};
    \node [block,left=2cm of DCT] (MFCC) {Descriptores MFCC};


    % Draw edges
    \draw [arrow] (signal) -- (FFT);
    \draw [arrow] (FFT) -- node [above] {espectro} (MSF);
    \draw[arrow] (MSF)  -|  (Log) node [above,pos=0.25] {espectro} node [below,pos=0.25] {de Mel}   ;  
    \draw[arrow] (Log.south) |-  (DCT.east);  
    \draw [arrow] (DCT) -- (MFCC) ;
\end{tikzpicture}
\end{document} 

相关内容