如何在乳胶中绘制谐波图?

如何在乳胶中绘制谐波图?

我正在尝试绘制下图所示的图表(即使用箭头或线条来显示重要的频率点也足够了)我已经搜索了几个小时,但找不到可以帮助我绘制它的示例代码。你能帮助我吗?

在此处输入图片描述

答案1

欢迎!如果您想绘制真实数据,您需要真实数据。此答案假设您希望制作所描绘图的卡通。正如评论中宣传的那样,这可以相当容易地使用 pgfplots 来完成。可以定义一个假峰值函数(实际上并不是太假,因为这是峰值的 Breit-Wigner 形式),它取决于绘图变量x,并且还有两个参数控制位置和宽度。如果您添加其中几个(使用前因子固定相应峰值的高度),您将得到

\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=12cm,compat=1.16}% <- if you have an older installation, try 1.15 or 1.14
\begin{document}
\begin{tikzpicture}[declare function={%
    peak(\x,\u,\v)=ifthenelse(\x>\u*(1-\v) && \x<\u*(1+\v),
    -\v/(1+\v)+\v/(\v+pow((\x-\u)/(\u*\v),2)),0);}]
\begin{axis}[xmode=log,
  xminorgrids,
  ymajorgrids,
  grid style={densely dashed,thin},
  xtick={1,10,100,1000,10000,100000},
  xticklabels={$1\mathsf{kHz}$,$10\mathsf{kHz}$,$100\mathsf{kHz}$,
    $1\mathsf{MHz}$,$10\mathsf{MHz}$},
  yticklabel=$\mathsf{\pgfmathprintnumber{\tick}}\mathsf{A}$,
  ytick={0,0.8,...,8.8},
  ymax=8.1]
 \addplot[blue,no marks,domain=0.5:30000,samples=501] 
 {7.9*peak(x,130,0.1)+0.3*peak(x,170,0.2)+0.8*peak(x,220,0.1)};
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

如果添加更多峰值,则可以高质量地重现屏幕截图。至于时间:在五年前的 MacBook Pro 上,编译需要 5 秒钟。您可以使用来加快速度,gnuplot但我个人认为 5 秒钟还不错。您可能还想添加其他内容,例如siunits单位等,但我更喜欢将此处的代码保持在最低限度。

相关内容