仅包含文件中的 z 数据的表面图,而 x 和 y 坐标需要计算

仅包含文件中的 z 数据的表面图,而 x 和 y 坐标需要计算

我想从大量文本文件中的数据。

为了最小化文件大小,并且值位于一个规则的矩形网格上,X坐标不存储在文件中,但应在读取时即时计算文件中的数据。

考虑以下最小示例排队数据(取自pgfplots手册):

\documentclass{article}
\usepackage{pgfplots}

\pgfplotsset{width=7cm,compat=1.12}

\begin{document}

\begin{tikzpicture}
  \begin{axis}[view={0}{90}]
  \addplot3[surf,mesh/rows=3] coordinates {
    (0,0,0) (1,0,0) (2,0,0) (3,0,0) (0,1,0) (1,1,0.6) (2,1,0.7) (3,1,0.5) (0,2,0) (1,2,0.7) (2,2,0.8) (3,2,0.5)
  };
\end{axis}
\end{tikzpicture}

\end{document}

我该如何修改这个例子,让它能够从外部的数据文件格式如下(全部单个输入行上的值;后面还有更多输入行,每行代表另一个时间步长):

% input.dat
0 0 0 0 0 0.6 0.7 0.5 0 0.7 0.8 0.5

这是否可以开箱即用,还是我必须通过外部程序或脚本预处理数据?

答案1

这不是进行必要预处理的唯一方法。您还可以使用xstringpgfplotstable

\parse注意:后面的空白#1很重要。

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.12}

\newcommand{\somelist}{}% reserve global name

\begin{document}

\bgroup% use local names and registers
  \countdef\row=1
  \countdef\column=2
% copy file to \data
  \newread\fid
  \openin\fid=test.dat % contains only 0 0 0 0 0 0.6 0.7 0.5 0 0.7 0.8 0.5
  \read\fid to\data% reads one line from file
  \closein\fid
% recursive macro, #1 = text to next blank (each interation)
  \def\parse#1 {\xdef\somelist{\somelist(\the\row,\the\column,#1)}
    \advance\row by 1
    \ifnum\row>3\relax
      \row=0
      \advance\column by 1
    \fi
    \ifnum\column>2\else\expandafter\parse\fi}
% format data to \somelist
  \xdef\somelist{}
  \row=0
  \column=0
  \expandafter\parse\data
\egroup

\begin{tikzpicture}
  \begin{axis}[view={0}{90}]
  \addplot3[surf,mesh/rows=3] coordinates{\somelist};
\end{axis}
\end{tikzpicture}

\end{document}

如果您有注释行,您将需要手动阅读/跳过它们。

相关内容