在 TikZ 中从外部 csv 绘制 Bode-Plot

在 TikZ 中从外部 csv 绘制 Bode-Plot

我想要实现这样的情节:

波德

以下代码产生此输出:

    \documentclass[border=3mm,
               tikz,
               preview
               ]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=8cm,compat=newest}

\begin{document}
    \begin{tikzpicture}
\begin{loglogaxis}[
title=Bode diagram,
xlabel={frequency},
ylabel={amplitude},
grid=major
                    ]
\addplot[domain=1:100000]  {(60*x+10000)/(x*x + 60*x+10000)};
\end{loglogaxis}
    \end{tikzpicture}
\end{document}

问题是,我有一个包含 3 列的 *.csv 文件。结构如下:

擅长

该文件有 1000 行,因此稍微大一些。我怎样才能将幅度/相位绘制成 2 个图?

答案1

只需使用“pgfplotstable”函数(已用 pgfplot 加载)和“groupplot”库(必须在包后指定)。

\documentclass[border=3mm,tikz,preview]{standalone}
\usepackage{filecontents}
\usepackage{pgfplots}
\pgfplotsset{width=8cm,compat=newest}
\usepgfplotslibrary{groupplots}

\begin{filecontents}{pntInBode.csv}
freq,amp,phase
10,55,-0.5
\end{filecontents}

\pgfplotstableread[col sep=comma]{pntInBode.csv}{\data}

\begin{document}
\begin{tikzpicture}
\begin{groupplot}[
    group style={
        group name=plot,
        group size=1 by 2,
        x descriptions at=edge bottom,
        vertical sep=0.1cm,
    },
    domain=1:100000,
    xlabel={frequency},
    xmode=log,
]
\nextgroupplot[title=Bode diagram,ylabel={amplitude},ymode=log]
\addplot[black, no marks] {(60*x+10000)/(x*x + 60*x+10000)};
\addplot[red,only marks,mark=x] table[x index=0, y index=1] {\data};
\nextgroupplot[ylabel={phase},ymin=-1]
\addplot[black, no marks] {(60*x+10000)/(x*x + 60*x+10000)};
\addplot[blue, only marks, mark=o] table[x index=0, y index=2] {\data};
\end{groupplot}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

如果你的函数只是简单函数(一阶、二阶、积分……)的组合,除了 bodegraph 包之外,你还可以使用在线应用程序http://bode.allais.eu/ 它生成绘制Bode图的代码。

在此处输入图片描述

相关内容