我正在尝试绘制流程图,但在获取正确细节方面遇到了一些麻烦。目前,我的代码如下所示:
% 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}
输出如下内容:
在第一行,最右边的箭头上方和下方有一个文字“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.5
MSF
Log.north
Log
虽然它仍然有效,但该
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}