Pgfplots 和数据文件算法

Pgfplots 和数据文件算法

我有一个包含很多列的文件(表格)。第一列中有一个时间变量,接下来的三列表示位置的矢量分量。现在我想绘制时间函数中的矢量幅值。可以用一个简单的命令来完成吗?

另一个相关的问题。我有一个文件,其中包含角速度和功,它们是相关的。现在,我想绘制效率而不是功。可以将功列除以一个数字吗?如果我必须为每个工作点使用不同的数字,并且这些不同的数字存储在一个文件中,这仍然可行吗?

对于第一种情况我有以下代码:

\documentclass{standalone}

\useoackage{pfgplots}

\begin{document}

\begin{figure}
\centering
        \begin{tikzpicture}
    \begin{axis}[title={}, xlabel={$x$}, ylabel={$z$},%
    legend cell align=left]

        \addplot[orange,thick]
            table[x index=0,y index=1] {mydata.dat};

        \legend{}
    \end{axis}
    \end{tikzpicture}
\end{figure}

\end{document}

其中mydata.dat包含以下内容:

0 0 0 0
1 0.1 0 0
2 0.2 0.1 0
3 0.3 0.2 0.1

我想绘制最后三列(这些列表示矢量分量,因此我想要幅度)平方和的平方根与时间(第一列)的函数关系。这可能吗?

答案1

这确实可以通过使用x expr和 类似的选项来实现\addplot table,如 PGFplots 文档第 4.2.5 节所述。这些选项允许您使用 PGF 的数学解析器根据输入数据手动计算要绘制的值。用法可能最好通过示例来展示:

\documentclass{standalone}
\usepackage{pgfplots}

\begin{document}
 \begin{tikzpicture}
  \begin{axis}
   \addplot table[x index=0,
     y expr={sqrt(\thisrowno{1}^2 + \thisrowno{2}^2 + \thisrowno{3}^2)}]
     {mydata.dat};
  \end{axis}
 \end{tikzpicture}
\end{document}

如果所有数字都在同一个文件中,您的另一个示例也可以以相同的方式完成;您只需将数学表达式替换为适合新情况的表达式即可。如果您的数字位于不同的文件中,那么您可以编写一个 shell 脚本来从各个文件中提取数字并将它们写入标准输出,然后使用脚本\addplot shell使 PGFplots 解析命令的输出。但除非数字经常变化,否则只需手动运行一次 shell 命令即可创建,这样工作量可能会更少mydata.dat

相关内容