TIZK: How to create multiple images from csv files
Hello people. I have 3 .csv files generated from a soccer match log. The ball.dat file contains the positions of the ball every second. The blue.dat and yellow.dat files contain the players' positions, id and name (also separated every second).
If I separate each file per second, I can generate an isolated image similar to the attached one. However, I wanted it to be generated automatically from the number of seconds (using the balls.dat file as a reference).
I also need to put the player's name on top of each representation of the robot.
Any idea? Follow what I've done so far ...
EDIT: Hello, I understand the filter issue ... but I believe it would have to be something like this
while not eof balls.txt
draw the field
draw the ball
save the second of the ball (1 field)
for each blue.dat record
draw players with the same second as the ball (1 field)
for each yellow.dat record
draw players with the same second as the ball (1 field)
end while
It is possible?
And very grateful for the help !!!
\documentclass[varwidth]{standalone}
\usepackage{tikzducks,listofitems}
\usetikzlibrary{arrows.meta, calc,backgrounds}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{geometry}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{lmodern}
\geometry{
%paperwidth=25cm,
left=1in,right=1in,top=1in,bottom=1in
}
\pgfplotsset{% https://tex.stackexchange.com/a/75811/121799
name nodes near coords/.style={
every node near coord/.append style={
name=#1-\coordindex,
alias=#1-last,
},
},
name nodes near coords/.default=coordnode
}
\usepackage{relsize}
\usepackage{filecontents}
%second, time(microsec), x, y
\begin{filecontents}{balls.dat}
1;0.163867;853.202;411.623
2;0.665292;853.205;411.634
3;1.14752;853.253;411.666
4;1.65572;860.782;420.365
5;2.13361;944.19;510.61
\end{filecontents}
%second, time(microsec), id robot, x, y, name robot (G = goalie)
\begin{filecontents}{blue.dat}
1;0.163867;0;59.9436;447.041;G0
1;0.163867;1;1024.84;305.308;L1
1;0.163867;6;1025.1;345.362;L6
1;0.163867;11;1025.39;144.934;L11
1;0.163867;5;1025.41;184.981;L5
1;0.163867;7;857.125;378.16;L7
1;0.163867;10;1024.93;265.435;L10
2;0.665292;0;59.8692;447.08;G0
2;0.665292;6;1024.92;364.446;L6
2;0.665292;10;1012.87;283.053;L10
2;0.665292;5;1042.67;190.815;L5
2;0.665292;11;1044.36;138.297;L11
2;0.665292;7;851.479;387.303;L7
2;0.665292;1;1011.04;324.776;L1
3;1.14752;6;1030.34;432.027;L6
3;1.14752;1;989.862;364.013;L1
3;1.14752;10;986.258;316.301;L10
3;1.14752;11;1087.93;132.348;L11
3;1.14752;5;1084.32;210.705;L5
3;1.14752;7;843.719;402.942;L7
3;1.14752;0;59.9243;447.097;G0
4;1.65572;0;59.7685;447.159;G0
4;1.65572;6;1043.28;502.523;L6
4;1.65572;10;996.377;319.225;L10
4;1.65572;5;1090;224.371;L5
4;1.65572;1;997.526;402.626;L1
4;1.65572;11;1094.68;135.896;L11
4;1.65572;7;846.519;406.466;L7
5;2.13361;10;995.959;339.028;L10
5;2.13361;1;997.691;425.286;L1
5;2.13361;6;1070.78;576.922;L6
5;2.13361;5;1095.77;215.895;L5
5;2.13361;7;870.321;431.887;L7
5;2.13361;11;1062.27;151.637;L11
5;2.13361;0;59.8403;451.457;G0
\end{filecontents}
%second, time(microsec), id robot, x, y, name robot (G = goalie)
\begin{filecontents}{yellow.dat}
1;0.163867;4;129.81;604.7;L4
1;0.163867;1;1061.97;336.491;L1
1;0.163867;2;1072.86;316.706;L2
1;0.163867;11;1105.81;315.586;L11
1;0.163867;9;931.528;421.691;L9
1;0.163867;6;1125.61;315.509;L6
1;0.163867;5;1062.42;435.047;L5
1;0.163867;10;1186.28;458.823;G10
2;0.665292;4;149.446;600.335;L4
2;0.665292;9;931.478;421.653;L9
2;0.665292;2;1062.65;319.062;L2
2;0.665292;6;1130.93;315.62;L6
2;0.665292;1;1055.34;347.775;L1
2;0.665292;11;1111.41;315.564;L11
2;0.665292;5;1062.56;435.184;L5
2;0.665292;10;1187.68;484.545;G10
3;1.14752;9;931.601;421.634;L9
3;1.14752;5;1062.55;435.141;L5
3;1.14752;2;1051.66;330.343;L2
3;1.14752;11;1131.94;314.61;L11
3;1.14752;6;1152.1;315.178;L6
3;1.14752;10;1185.93;500.69;G10
3;1.14752;1;1059.89;381.66;L1
3;1.14752;4;202.01;558.01;L4
4;1.65572;4;256.971;471.213;L4
4;1.65572;11;1131.7;315.357;L11
4;1.65572;2;1031;309.405;L2
4;1.65572;10;1183.94;503.177;G10
4;1.65572;1;1050.97;401.046;L1
4;1.65572;6;1154.76;315.225;L6
4;1.65572;5;1062.53;435.206;L5
4;1.65572;9;931.799;421.595;L9
5;2.13361;9;946.568;435.222;L9
5;2.13361;5;1063.26;450.65;L5
5;2.13361;2;1019.86;284.222;L2
5;2.13361;6;1150.71;314.681;L6
5;2.13361;10;1182.65;506.68;G10
5;2.13361;1;1053.52;432.132;L1
5;2.13361;11;1130.51;315.423;L11
5;2.13361;4;286.898;366.275;L4
\end{filecontents}
\definecolor{field}{RGB}{0,156,0}
\definecolor{pinkr}{RGB}{255,8,127}
\tikzset{
every node/.style={very thick, inner sep=0, outer sep=0,draw=white},
every path/.style={draw=white, very thick},
}
\newcommand\area[2]{
\begin{scope}[shift={(#1)},transform shape, rotate=#2]
\node[minimum width=1.2cm,minimum height=2.4cm, anchor=west] (small#2) at (0,0) {};
\node[minimum width=.244cm, minimum height=1.2cm, anchor=east] (goal#2) at (0,0) {};
\begin{scope}
\tikzset{every path/.style={}}
\end{scope}
\end{scope}
}
\newcommand{\Playerb}[1]{
\ifcase#1
\xdef\ColorList{green,pinkr,pinkr,pinkr} %0
\or
\xdef\ColorList{green,pinkr,pinkr,green} %1
\or
\xdef\ColorList{green,pinkr,green,green} %2
\or
\xdef\ColorList{green,pinkr,green,pinkr} %3
\or
\xdef\ColorList{pinkr,green,pinkr,pinkr} %4
\or
\xdef\ColorList{pinkr,green,pinkr,green} %5
\or
\xdef\ColorList{pinkr,green,green,green} %6
\or
\xdef\ColorList{pinkr,green,green,pinkr} %7
\or
\xdef\ColorList{green,green,green,green} %8
\or
\xdef\ColorList{pinkr,pinkr,pinkr,pinkr} %9
\or
\xdef\ColorList{green,green,pinkr,pinkr} %10
\or
\xdef\ColorList{pinkr,pinkr,green,green} %11
\fi
\begin{tikzpicture}[scale=0.1]
\clip (-2.5,-2) rectangle (1.2,2);
\draw[fill=black] (-1,0) circle (1);
\draw[fill=blue] (-1,0) circle (0.5) node {\tiny\sffamily \n};
\readlist\x{-1,0,-1,-2}
\readlist\y{-1,0,1,0}
\foreach \Color [count=\n] in \ColorList
{
\draw[fill=\Color] (\x[\n],\y[\n]) circle (0.4);
}
\end{tikzpicture}
}
\newcommand{\Playery}[1]{
\ifcase#1
\xdef\ColorList{pinkr,pinkr,green,pinkr} %0
\or
\xdef\ColorList{pinkr, green,green,pinkr} %1
\or
\xdef\ColorList{green,green,green,pinkr} %2
\or
\xdef\ColorList{green,pinkr,green,pinkr} %3
\or
\xdef\ColorList{pinkr,pinkr,pinkr,green} %4
\or
\xdef\ColorList{pinkr,green,pinkr,green} %5
\or
\xdef\ColorList{green,green,pinkr,green} %6
\or
\xdef\ColorList{green,pinkr,green,green} %7
\or
\xdef\ColorList{green,green,green,green} %8
\or
\xdef\ColorList{pinkr,pinkr,pinkr,pinkr} %9
\or
\xdef\ColorList{pinkr,pinkr,green,green} %10
\or
\xdef\ColorList{green,green,pinkr,pinkr} %11
\fi
\begin{tikzpicture}[scale=0.1]
\clip (-2.5,-2) rectangle (1.2,2);
\draw[fill=orange] (-1,0) circle (1);
\draw[fill=yellow] (-1,0) circle (0.5) node {\tiny\sffamily \n};
\readlist\x{-1,0,-1,-2}
\readlist\y{-1,0,1,0}
\foreach \Color [count=\n] in \ColorList
{
\draw[fill=\Color] (\x[\n],\y[\n]) circle (0.4);
}
\end{tikzpicture}
}
\begin{document}
\pgfplotstablegetrowsof{blue.dat}
\pgfmathsetmacro{\rowsBlue}{\pgfplotsretval-1}
\pgfplotstablegetrowsof{yellow.dat}
\pgfmathsetmacro{\rowsYellow}{\pgfplotsretval-1}
\pgfmathsetmacro{\rowsYellowGoalie}{\pgfplotsretval}
\pgfplotstablegetrowsof{balls.dat}
\pgfmathsetmacro{\rowsBall}{\pgfplotsretval-1}
\begin{tikzpicture}
\begin{scope}[on background layer]
\fill[field] (-1,-1) rectangle (13,10);
\node[minimum width=12cm, minimum height=9cm] (contour) at (6,4.5) {};
% Center
\draw (contour.north) -- (contour.south);
\draw (contour.center) circle (0.915cm);
\fill[white] (contour.center) circle (.5mm);
% Areas
\area{contour.west}{0}
\area{contour.east}{180}
% Corners
\foreach \corner [count=\xi starting from 0] in {south west, south east, north east, north west}{
\begin{scope}[rotate around={90*\xi:(contour.\corner)}]
\draw ([xshift=1mm]contour.\corner) arc (0:90:1mm);
\end{scope}
}
\end{scope}
\tikzset{ % <- undo the settings needed for the soccer field
every node/.style={},
every path/.style={},
}
\begin{axis}[x=.01cm, y=.01cm, xmin=0, ymin=0, xmax=1200,ymax=900,nodes near coords,enlargelimits=0.0]
\addplot [only marks,mark=*, mark options={color = orange},name nodes near coords=ball,nodes near coords={}] table [header=false, x index=2, y index=3, col sep=semicolon] {balls.dat};
\addplot [only marks,mark=*, mark options={color = blue},name nodes near coords=b,nodes near coords={}] table [header=false, x index=3, y index=4, col sep=semicolon] {blue.dat};
\addplot [only marks,mark=*,mark options={color = yellow}, name nodes near coords=y,nodes near coords={}] table [header=false, x index=3, y index=4, col sep=semicolon]{yellow.dat};
\end{axis}
\foreach \n in {0,...,7}
{
\node at (b-\n.south){\Playerb{\n}};
}
\foreach \n in {0,...,7}
{
\node at (y-\n.south){\Playery{\n}};
}
\end{tikzpicture}
\end{document}