How to add decimals in \pgfplotstableread
?
The following code works without decimals...
\pgfplotstableread[col sep=comma]{
label,startyear,endyear
D, 2003, 2008
E, 2008, 2011
F, 2012, 2014
G, 2013, 2017
}\events
...but not with decimals (where I have also added precision=1
)...
\pgfplotstableread[col sep=comma,precision=1]{
label,startyear,endyear
D, 2003.8, 2008.2
E, 2008.9, 2011.7
F, 2012.3, 2014.5
G, 2013.5, 2017.4
}\events
....in the following code:
\documentclass{article}
\usepackage{tikz, pgfplotstable}
\usetikzlibrary{arrows.meta}
\usepackage[utf8]{inputenc}
% read in table
\pgfplotstableread[col sep=comma]{
label,startyear,endyear
A, 2011, 2012
B, 2016, 2018
C, 2018, 2022
}\authors
\pgfplotstableread[col sep=comma,precision=1]{
label,startyear,endyear
D, 2003.8, 2008.2
E, 2008.9, 2011.7
F, 2012.3, 2014.5
G, 2013.5, 2017.4
}\events
% add color columns
\pgfplotstablecreatecol[create col/set={blue!30}]{color}{\authors}
\pgfplotstablecreatecol[create col/set={red!30}]{color}{\events}
% append events table to authors table
\pgfplotstablevertcat{\authors}{\events}
% sort by startyear
\pgfplotstablesort[sort key=startyear]\sortedtable\authors
\begin{document}
\noindent\begin{tikzpicture}[x=7mm]
\pgfmathsetmacro\yscale{0.3} % scaling for y-direction
% -- effectively vertical distance between bars
\pgfmathsetmacro\barheight{0.25} % height of bars
\pgfplotstablegetrowsof{\sortedtable}
\pgfmathsetmacro{\M}{\pgfplotsretval-1}
\foreach [count=\i,evaluate=\i as \ylevel using \i*\yscale] \row in {0,...,\M}{
% get entries from table row
\pgfplotstablegetelem{\row}{[index]0}\of\sortedtable
\let\txt\pgfplotsretval
\pgfplotstablegetelem{\row}{[index]1}\of\sortedtable
\let\xstart\pgfplotsretval
\pgfplotstablegetelem{\row}{[index]2}\of\sortedtable
\let\xend\pgfplotsretval
\pgfplotstablegetelem{\row}{[index]3}\of\sortedtable
\let\barcolor\pgfplotsretval
\xdef\TheLastY{\ylevel}
\ifnum \xend=-1
% single day entry, draw circle
\filldraw [draw=black!99!\barcolor,fill=\barcolor] (\xstart-2000,-\ylevel)
circle[radius=\barheight/2.5*1cm]
node[black,right=3pt,font=\scriptsize] {\txt};
\else
% interval, draw a rectangle
\fill [\barcolor] (\xstart-2000,-\ylevel-\barheight/2) rectangle
(\xend-2000,-\ylevel+\barheight/2);
% add text label right of the rectangle
\node [right,font=\scriptsize] at (\xend-2000,-\ylevel) {\txt};
\fi
}
\draw [Stealth-Stealth] (2003-2000,0) -- (2003-2000,-\TheLastY-\yscale)
-- (2023-2000,-\TheLastY-\yscale);
% add ticks on x-axis
\foreach \year in {2003, 2004, ..., 2022}
\draw (\year-2000,-\TheLastY-\yscale) ++(0,3pt)
-- ++(0,-6pt) node[rotate=45,anchor=east] {\year};
\end{tikzpicture}
\end{document}