답변1
순수 TikZ 솔루션:
\documentclass[tikz,
border=3mm,
]{standalone}
\usetikzlibrary{arrows.meta,
quotes
}
\begin{document}
\begin{tikzpicture}[x=16mm,
every edge/.style = {draw, Straight Barb-Straight Barb},
every edge quotes/.style = {fill=white,font=\footnotesize}
]
\draw[very thick,red, smooth,domain=9:101] plot (\x/10,rand);
\foreach \x in {1, 3, 4, 5, 7, 6, 8, 9, 10}
\draw[dashed] (\x,-1.1) -- ++ (0,2.2);
\draw (3.0,-1.3) edge ["Frame step"] ++ (2,0)
(5.0,-1.3) edge ["Overlap"] ++ (1,0)
(1.0,-1.6) edge ["Frame 1"] ++ (3,0)
(5.0,-1.6) edge ["Frame 3"] ++ (3,0)
(3.0,-1.9) edge ["Frame 2"] ++ (3,0)
(7.0,-1.9) edge ["Frame 4"] ++ (3,0);
\end{tikzpicture}
\end{document}
답변2
심심해서 의 도움을 받아 제안을 드립니다 pgfplots
.
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\begin{document}
\begin{tikzpicture}[
doublearrow/.style={
<->,
>=latex,
every node/.style={fill=white,font=\scriptsize}}]
\begin{axis}[
axis lines=none,
clip=false,
width=12cm,
height=3cm
]
\pgfmathsetseed{1} % to get same output every time
\addplot[black,smooth,domain=0:10] {rnd};
\pgfplotsinvokeforeach{1,3,3.5,5,7,7.5,9}{% draw vertical dotted line at these x-positions
\draw [densely dotted] (#1,0) -- (#1,1.5);
}
% draw arrows with text
\draw [doublearrow] (1,-0.2) -- node{Frame 1} (3.5,-0.2);
\draw [doublearrow] (3,-0.4) -- node{Frame 2} (5,-0.4);
\end{axis}
\end{tikzpicture}
\end{document}
그리고 다른 답변이 게시되는 동안 TikZ만으로 이 작업을 하고 있었기 때문입니다. 필요한 경우 쉽게 수정할 수 있도록 프레임 너비, 단계 등을 유지하는 몇 가지 매크로를 만들었습니다. 매크로 하나를 변경하면 모든 화살표도 함께 이동합니다. (여기에서는 프레임 너비와 단계가 일정하다고 가정합니다.)
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
doublearrow/.style={
<->,
>=latex,
every node/.style={fill=white,font=\scriptsize}}]
\pgfmathsetseed{42}
\draw plot[smooth,domain=0:12,samples=25] (\x,rnd);
\pgfmathsetmacro\FrameStart{1}
\pgfmathsetmacro\FrameW{3}
\pgfmathsetmacro\FrameOverlap{0.5}
\pgfmathsetmacro\FrameStep{\FrameW-\FrameOverlap}
\foreach[
evaluate=\i as \y using {ifthenelse(mod(\i,2)==0,-0.4,-0.8)},
evaluate=\i as \X using \i*\FrameStep+\FrameStart,
count=\j
] \i in {0,...,3} {
\draw [densely dotted] (\X,0) -- (\X,1.5);
\draw [densely dotted] (\X+\FrameW,0) -- (\X+\FrameW,1.5);
\draw [doublearrow] (\X,\y) -- node{Frame \j} (\X+\FrameW,\y);
}
\draw [doublearrow] (\FrameStart+\FrameStep,1.3) -- node{Frame step} +(\FrameStep,0);
\draw [doublearrow] (\FrameStart+3*\FrameStep,1) -- node[above=2pt,font=\tiny]{Overlap} +(\FrameOverlap,0);
\end{tikzpicture}
\end{document}
답변3
@Dr.ManuelKuehner의 제안을 바탕으로 이 솔루션을 만들었습니다.
\begin{figure}[H]
\centering
\begin{tikzpicture}
% Frame length: 3
% Overlap length:0.6
% Frame start sections: 0 - 1.4 - 2.8 - 4.2
% Frame end sections: 2 - 3.4 - 4.8 - 4.2
\draw[->] (-1,0) -- ++ (12,0) node[right] {Time}; %X-axis line
\draw[thick, blue] plot[domain=0:11.7*pi, samples=60] (\x/pi,{sin(0.9*\x r) + sin(0.42*\x r)}); %sine wave
\draw[densely dashed] (0,-1.5) -- + (0,3.0) (3,-1.5) -- + (0,3.6);% frame 1
\draw[<->] (0,-1.3) -- node[below] {Frame 1} + (3,0);
\draw[densely dashed] (2.4,-1.1) -- + (0,3.3) (5.4,-1.1) -- + (0,4.1);
\draw[<->] (2.4,2.1) -- node[above] {Overlap} + (0.6,0);
\draw[<->] (2.4,-2.1) -- node[below] {Frame 2} + (3,0);
\draw[densely dashed] (4.8,-1.5) -- + (0,4.4) (7.8,-1.5) -- + (0,3.6);
\draw[<->] (4.8,2.9) -- node[above] {Overlap} + (0.6,0);
\draw[<->] (4.8,-1.3) -- node[below] {Frame 3} + (3,0);
\draw[densely dashed] (7.2,-1.1) -- + (0,3.3) (10.2,-1.1) -- + (0,3.3);
\draw[<->] (7.2,2.1) -- node[above] {Overlap} + (0.6,0);
\draw[<->] (7.2,-2.1) -- node[below] {Frame 4} + (3,0);
\end{tikzpicture}
\end{figure}