我想知道如何在 Tikz 中输入这个脉冲响应与极点位置图。
它与庞加莱图非常相似:
http://www.texample.net/tikz/examples/poincare/
有人可以输入一个例子来开始吗?
谢谢!! :)
答案1
以下是示例。较小的图形定义为pic
并放置在极点附近。定义 时,可以使用xshift
和yshift
键调整图形相对于极点的位置。scope
scope
\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}
评论:
- 用 来生成镶嵌图似乎更自然
pgfplots
。但是,将轴做得非常小并非易事。预定义的tiny
轴仍为 4cm 宽。一个可以使其工作(并放置轴at=(x,y)
),但这会是一个相当大的黑客攻击。 - 也
pic
可以使用path picture
,如图所示这里。然而,这也并非没有缺点,因为实际上不支持在路径图片内添加节点。
出于这些原因,我建议使用pic
,即使缺少锚点会使放置变得不那么直观。(一个能将通常的锚点添加到 a pic
,使其成为 Ti 的唯一元素钾Z 矩阵。我想知道是否有人想过从tikz.code.tex
“nodify”图片中复制相关部分。)