0

I have table with 1200 rows x 900 collumns, separate by semicolon (;)

Each position is a coord x,y. Example with 10 x 10

0;0;0;0;0;0;0;0;0;0
1;0;3;3;2;0;1;0;0;0
0;5;6;3;5;0;0;0;0;0
3;5;0;0;0;0;0;5;6;3
1;0;1;0;0;1;0;2;1;300
55;2;3;5;0;0;0;0;27;1
2;2;2;0;0;0;3;2;0;1;2
0;3;2;2;2;3;2;3;2;1;1
1;3;2;1;1;5;1;1;0;0;2
31;3;1;1;3;0;4;99;10;11

In this case, 1 line is "cold" (every column is 0). Line 6 have coords "hots". Each column can range from 1 to 65000 (in my simulations, max value is ~15000).

I thought of using surface plot ... is it possible?

I thought I'd get a graph similar to the one below.

enter image description here

  • I am not convinced pgfplots is the right tool for over 1M data points. BTW rows 7-9 have an excess entry each. – user121799 Jun 11 '19 at 0:26
1

You can read the data and convert it to a format that pgfplots can plot.

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{pgfplots.colormaps}
\pgfplotsset{compat=1.16}
\usepackage{pgfplotstable}
\usepackage{filecontents}
\begin{filecontents*}{entries.dat}
0;0;0;0;0;0;0;0;0;0
1;0;3;3;2;0;1;0;0;0
0;5;6;3;5;0;0;0;0;0
3;5;0;0;0;0;0;5;6;3
1;0;1;0;0;1;0;2;1;300
55;2;3;5;0;0;0;0;27;1
2;2;2;0;0;0;3;2;0;1
0;3;2;2;2;3;2;3;2;1
1;3;2;1;1;5;1;1;0;0
31;3;1;1;3;0;4;99;10;11
\end{filecontents*}
\newcommand*{\ReadOutElement}[4]{%
    \pgfplotstablegetelem{#2}{[index]#3}\of{#1}%
    \let#4\pgfplotsretval
}
\begin{document}
\pgfplotstableread[header=false,col sep=semicolon]{entries.dat}\datatable
\pgfplotstablegetrowsof{\datatable}
\pgfmathtruncatemacro{\numrows}{\pgfplotsretval}
\pgfplotstablegetcolsof{\datatable}
\pgfmathtruncatemacro{\numcols}{\pgfplotsretval}
\typeout{\numcols,\numrows}
\xdef\LstX{}
\xdef\LstY{}
\xdef\LstC{}
\foreach \Y [evaluate=\Y as \PrevY using {int(\Y-1)},count=\nY] in {1,...,\numrows}
{\pgfmathtruncatemacro{\newY}{\numrows-\Y}
\foreach \X  [evaluate=\X as \PrevX using {int(\X-1)},count=\nX] in {1,...,\numcols}
{
\ReadOutElement{\datatable}{\PrevY}{\PrevX}{\Current}
\pgfmathtruncatemacro{\nZ}{\nX+\nY}
\ifnum\nZ=2
\xdef\LstX{\PrevX}
\xdef\LstY{\PrevY}
\xdef\LstC{\Current}
\else
\xdef\LstX{\LstX,\PrevX}
\xdef\LstY{\LstY,\PrevY}
\xdef\LstC{\LstC,\Current}
\fi
}
}
\edef\temp{\noexpand\pgfplotstableset{
 create on use/x/.style={create col/set list={\LstX}},
 create on use/y/.style={create col/set list={\LstY}},
 create on use/color/.style={create col/set list={\LstC}},}}
\temp
\pgfmathtruncatemacro{\strangenum}{\numrows*\numcols}
\pgfplotstablenew[columns={x,y,color}]{\strangenum}\strangetable

%\pgfplotstabletypeset[empty cells with={---}]\strangetable
\begin{tikzpicture}
\begin{axis}[]
 \addplot3 [surf] table [meta=color,col sep=comma] \strangetable;
\end{axis}
\end{tikzpicture}
\end{document}

enter image description here

The usual way to present such data, however, are heat maps/matrix plots.

\documentclass[border=3.14mm,tikz]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{pgfplots.colormaps}
\pgfplotsset{compat=1.16}
\usepackage{pgfplotstable}
\usepackage{filecontents}

\begin{filecontents*}{entries.dat}
0;0;0;0;0;0;0;0;0;0
1;0;3;3;2;0;1;0;0;0
0;5;6;3;5;0;0;0;0;0
3;5;0;0;0;0;0;5;6;3
1;0;1;0;0;1;0;2;1;300
55;2;3;5;0;0;0;0;27;1
2;2;2;0;0;0;3;2;0;1
0;3;2;2;2;3;2;3;2;1
1;3;2;1;1;5;1;1;0;0
31;3;1;1;3;0;4;99;10;11
\end{filecontents*}
\newcommand*{\ReadOutElement}[4]{%
    \pgfplotstablegetelem{#2}{[index]#3}\of{#1}%
    \let#4\pgfplotsretval
}
\begin{document}
\pgfplotstableread[header=false,col sep=semicolon]{entries.dat}\datatable
\pgfplotstablegetrowsof{\datatable}
\pgfmathtruncatemacro{\numrows}{\pgfplotsretval}
\pgfplotstablegetcolsof{\datatable}
\pgfmathtruncatemacro{\numcols}{\pgfplotsretval}
\xdef\LstX{}
\xdef\LstY{}
\xdef\LstC{}
\foreach \Y [evaluate=\Y as \PrevY using {int(\Y-1)},count=\nY] in {1,...,\numrows}
{\pgfmathtruncatemacro{\newY}{\numrows-\Y}
\foreach \X  [evaluate=\X as \PrevX using {int(\X-1)},count=\nX] in {1,...,\numcols}
{
\ReadOutElement{\datatable}{\PrevY}{\PrevX}{\Current}
\pgfmathtruncatemacro{\nZ}{\nX+\nY}
\ifnum\nZ=2
\xdef\LstX{\PrevX}
\xdef\LstY{\PrevY}
\xdef\LstC{\Current}
\else
\xdef\LstX{\LstX,\PrevX}
\xdef\LstY{\LstY,\PrevY}
\xdef\LstC{\LstC,\Current}
\fi
}
}
\edef\temp{\noexpand\pgfplotstableset{
 create on use/x/.style={create col/set list={\LstX}},
 create on use/y/.style={create col/set list={\LstY}},
 create on use/color/.style={create col/set list={\LstC}},}}
\temp
\pgfmathtruncatemacro{\strangenum}{\numrows*\numcols}
\pgfplotstablenew[columns={x,y,color}]{\strangenum}\strangetable

%\pgfplotstabletypeset[empty cells with={---}]\strangetable
\begin{tikzpicture}
% \pgfplotsset{%
%     colormap={WhiteRedBlack}{%
%         rgb255=(255,255,255)
%         rgb255=(255,0,0)
%         rgb255=(0,0,0)
%     },
% }
\begin{axis}[%
    point meta=explicit,
    %
    %colorbar sampled,
    colorbar as palette,
    colorbar style={samples=3},
    %colormap name=WhiteRedBlack,
    scale mode=scale uniformly,
]
\draw (axis description cs:0,0) -- (axis description cs:1,0);
 \addplot [
        matrix plot,
        %mesh/cols=4,
        point meta=explicit,
] table [meta=color,col sep=comma] \strangetable;
\end{axis}
\end{tikzpicture}
\end{document}

BTW, the rows 7-9 have an excess element in the OP's data that one has to strip off when one wants to write another answer.

enter image description here

|improve this answer|||||

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.