Tikz:脉冲响应与极点位置

Tikz:脉冲响应与极点位置

我想知道如何在 Tikz 中输入这个脉冲响应与极点位置图。

图像

它与庞加莱图非常相似:

http://www.texample.net/tikz/examples/poincare/

有人可以输入一个例子来开始吗?

谢谢!! :)

答案1

以下是示例。较小的图形定义为pic并放置在极点附近。定义 时,可以使用xshiftyshift键调整图形相对于极点的位置。scopescope

\documentclass[border=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning}

\tikzset{
pole/.style={blue},
grapha/.pic={
\begin{scope}[scale=0.3,xshift=-2cm, yshift=-4cm]
\draw[fill=gray!30] (-0.4,-0.4) rectangle ++(4,3);
\draw[->] (-0.4,0) -- ++(3.8,0)node[above]{$t$}; % axis
\draw[->] (0,-0.4) -- ++(0,2.8)node[right]{};
\draw[thick,domain=0:2.5]    plot (\x,{0.3*\x*\x});
\end{scope}
},
graphb/.pic={
\begin{scope}[scale=0.3,xshift=-2cm, yshift=3cm]
\draw[fill=gray!30] (-0.4,-1.5) rectangle ++(4,3);
\draw[->] (-0.4,0) -- ++(3.8,0)node[above]{$t$}; % axis
\draw[->] (0,-1.5) -- ++(0,2.8)node[right]{};
\draw[thick,domain=0:2.5]    plot (\x,{cos(8*\x r)});
\end{scope}
},
}

\begin{document}
\begin{tikzpicture}[>=stealth]
\draw[->] (-5,0) -- ++(10,0)node[below]{$Re(\sigma)$}; % axis
\draw[->] (0,-5) -- ++(0,10)node[right]{$Im(\sigma)$};

% poles
\node[pole] (a) at (3,0){$\times$};
\node[pole] (b) at (0,3){$\times$};

%
\draw pic  at (a) {grapha};
\draw pic  at (b) {graphb};

\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

这是基于这个答案,其中解决了类似的问题。您可以将函数添加到pic,例如

\path pic{graph={cos(1440*\t)*0.4*(1+0.1*\t)}};

即您不需要为每个不同的图形定义一个图片。这将cos(1440*\t)*0.4*(1+0.1*\t)在域中绘制函数的图0:0.9(我从您的屏幕截图中猜到了)。显然,\t是函数的变量。默认情况下,迷你轴将适合图和附加点(0,0)。如果您想延长轴,则需要添加额外的点,例如

\path pic[graph/extra points={(0,0) (0,1)}]{graph={0.5+0.1*\t}};

使轴线进一步向上延伸。为了方便起见,我还xmark为十字线添加了一个。以下是一些完整的示例:

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{backgrounds,shapes.misc}
\usepackage{amsmath}
\DeclareMathOperator{\re}{Re}
\DeclareMathOperator{\im}{Im}
\begin{document}
\begin{tikzpicture}[pics/graph/.style={code={
    \begin{scope}[local bounding box=temp]
    \draw[thick]      plot[variable=\t,domain=0:0.9,samples=101,smooth] 
     ({\t-0.5},{#1});
     \edef\temp{\noexpand\path \pgfkeysvalueof{/tikz/graph/extra points};}
     \temp
    \end{scope}
    \begin{scope}[on background layer]
    \draw[fill=gray!30] ([xshift=-2mm,yshift=-3mm]temp.south west)
    rectangle ([xshift=2mm,yshift=2mm]temp.north east);
    \draw[-stealth] ([yshift=-1mm]temp.south west) -- 
    ([yshift=1mm]temp.north west);
    \draw[-stealth] (-0.6,0) -- (0.5,0)node[below,scale=0.7]{$t$};
    \end{scope}
    }},/tikz/graph/extra points/.initial={(0,0)},
    xmark/.style={cross out,minimum size=1ex,node contents={},draw=cyan!70!blue}]
  \draw[-stealth] (-5,0) -- (5,0) node[below]{$\re(\sigma)$};
  \draw[-stealth] (0,-2) -- (0,5) node[right] {$\im(j\omega)$};
  \path (0,3) node[xmark]  ++ (0,1) pic{graph={cos(1440*\t)*0.4*(1+0.1*\t)}}
  (1,2.8)  node[xmark]  ++ (1,0.5) pic{graph={cos(1440*\t)*0.4*(1+0.1*\t)}}
  (2.2,0) node[xmark] ++ (0,0.6) pic[graph/extra points={(0,0) (0,1)}]{graph={0.5+0.1*\t}};
\end{tikzpicture}
\end{document}

在此处输入图片描述

评论:

  1. 用 来生成镶嵌图似乎更自然pgfplots。但是,将轴做得非常小并非易事。预定义的tiny轴仍为 4cm 宽。一个可以使其工作(并放置轴at=(x,y)),但这会是一个相当大的黑客攻击。
  2. pic可以使用path picture,如图所示这里。然而,这也并非没有缺点,因为实际上不支持在路径图片内添加节点。

出于这些原因,我建议使用pic,即使缺少锚点会使放置变得不那么直观。(一个将通常的锚点添加到 a pic,使其成为 Ti 的唯一元素Z 矩阵。我想知道是否有人想过从tikz.code.tex“nodify”图片中复制相关部分。)

相关内容