我有一个包含很多列的文件(表格)。第一列中有一个时间变量,接下来的三列表示位置的矢量分量。现在我想绘制时间函数中的矢量幅值。可以用一个简单的命令来完成吗?
另一个相关的问题。我有一个文件,其中包含角速度和功,它们是相关的。现在,我想绘制效率而不是功。可以将功列除以一个数字吗?如果我必须为每个工作点使用不同的数字,并且这些不同的数字存储在一个文件中,这仍然可行吗?
对于第一种情况我有以下代码:
\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
。