我是 pgfplots/pgfplotstable 的新手,遇到了以下问题。我有一个如下所示的数据文件,用于使用 pgfplots 进行绘图:
P1 P2 Value
1 1 0.00000000000e+00
1 2 1.00000000000e-02
1 3 0.00000000000e+00
2 1 1.00000000000e-02
2 2 1.00000000000e-02
2 3 3.00000000000e-02
我可以使用 pgfplots 绘制此图:
\begin{tikzpicture}
\begin{axis}
[
height=15cm,
width=\textwidth%,
]
\addplot3[surf] table {../../results/testdatafile.dat};
\end{axis}
\end{tikzpicture}
\end{figure}
现在我想添加一个表格来显示如下数据:
P2/P1 1 2
1 0.00000000000e+00 1.00000000000e-02
2 1.00000000000e-02 1.00000000000e-02
3 0.00000000000e+00 3.00000000000e-02
我不知道该如何实现这一点。如能得到任何帮助,我将不胜感激。
答案1
这使用 stringstrings \getargs 命令来获取/解析数据。然后我编写了一个 \readArray 命令来保存它。然后我可以从两个表中将数据调用到表格数组中。我可以使用保存的变量名称(第一个表)或使用 \Arrayij 命令(第二个表)来调用它
目前,stringstrings 数组大小限制为 500 个字符的字符串,但可以通过修改 stringstrings.sty 中的以下参数来增加大小。
\def\@MAXSTRINGSIZE{500}
我不知道对于较大的表来说它会变得多慢。stringstrings 可能会非常慢,这取决于操作。
对于我的简单示例,我不需要这样做。以下是代码:
\documentclass{article}
\usepackage{stringstrings}
\newcounter{index}
\newcounter{row}
\newcounter{col}
\newcommand\readArray[3]{
\setcounter{index}{0}
\setcounter{row}{1}
\setcounter{col}{0}
\getargs{#1}
\whiledo{\value{index} < \narg}{%
\addtocounter{index}{1}
% \arabic{index}:~
\addtocounter{col}{1}
\ifthenelse{\value{col} > #3}
{\addtocounter{row}{1}
\addtocounter{col}{-#3}}
{}
% \arabic{row}-\arabic{col}\\
\expandafter\edef\csname#2X\roman{row}X\roman{col}\endcsname%
{\expandafter\csname arg\roman{index}\endcsname}
}
}
\newcommand\Arrayij[3]{%
\setcounter{row}{#2}
\setcounter{col}{#3}
\csname#1X\roman{row}X\roman{col}\endcsname
}
\begin{document}
\def\dataA{
.15 12 13 14
.20 22 23 24
.25 32 33 Ending
}
\def\dataB{
.15 x12 x13 x14
.20 z22 x23 x24
.25 x32 x33 xEnding
}
\readArray{\dataA}{arA}{4}
\readArray{\dataB}{arB}{4}
\begin{tabular}{lll}
Value & Data A & Data B\\
& col3 & col3\\
\hline
\arAXiXi & \arAXiXiii & \arBXiXiii \\
\arAXiiXi & \arAXiiXiii & \arBXiiXiii \\
\arAXiiiXi & \arAXiiiXiii & \arBXiiiXiii \\
\end{tabular}
\vspace{1em}
\ldots or you can use the $\backslash$Arrayij command to invoke the
data
\begin{tabular}{lll}
Value & Data A & Data B\\
& col4 & col4\\
\hline
\Arrayij{arA}{1}{1} & \Arrayij{arA}{1}{4} & \Arrayij{arB}{1}{4} \\
\Arrayij{arA}{2}{1} & \Arrayij{arA}{2}{4} & \Arrayij{arB}{2}{4} \\
\Arrayij{arA}{2}{1} & \Arrayij{arA}{3}{4} & \Arrayij{arB}{3}{4} \\
\end{tabular}
\end{document}