322 lines
7.8 KiB
TeX
322 lines
7.8 KiB
TeX
\documentclass{article}
|
|
|
|
% Packages necessary for common.tex
|
|
\usepackage{amsmath}
|
|
\usepackage{pgfplots}
|
|
\pgfplotsset{compat=newest}
|
|
\usetikzlibrary{pgfplots.dateplot}
|
|
|
|
% Other packages
|
|
\usepackage[a4paper, total={12cm, 25cm}]{geometry}
|
|
\usepackage{float}
|
|
\usepackage{calc}
|
|
\usepackage{ifthen}
|
|
\usepackage{tikz}
|
|
\usepackage[l3]{csvsimple}
|
|
\usepackage{subcaption}
|
|
\usepackage{lmodern,textcomp}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%%%%%% Set common options %%%%%%%
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
|
|
\input{../lib/latex-common/common.tex}
|
|
\pgfplotsset{colorscheme/rocket}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%%%% Define Custom Commands %%%%%
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
|
|
\makeatletter
|
|
\newcommand*\shortyear[1]{\expandafter\@gobbletwo\number\numexpr#1\relax}
|
|
\makeatother
|
|
|
|
\newcommand{\slice}[6]{
|
|
\pgfmathparse{0.5*#1+0.5*#2}
|
|
\let\midangle\pgfmathresult
|
|
|
|
% slice
|
|
\fill[thick,color=#5] (0,0) -- (#1:1) arc (#1:#2+1:1) -- (0,0);
|
|
|
|
% outer label
|
|
\node[label=\midangle:#4] at (\midangle:1) {};
|
|
|
|
% inner label
|
|
\pgfmathparse{min((#2-#1-10)/110*(-0.3),0)}
|
|
\let\temp\pgfmathresult
|
|
\pgfmathparse{max(\temp,-0.5) + 0.8}
|
|
\let\innerpos\pgfmathresult
|
|
\node[color=#6] at (\midangle:\innerpos) {#3};
|
|
}
|
|
|
|
\newcounter{pieElem}
|
|
\newcounter{pieSliceA}
|
|
\newcounter{pieSliceB}
|
|
\newcommand{\pie}[1]{
|
|
% Count elements
|
|
\setcounter{pieElem}{0}%
|
|
\foreach\pieElem in {#1}{\stepcounter{pieElem}}%
|
|
\edef\numElements{\arabic{pieElem}}
|
|
|
|
% Draw pie chart
|
|
\setcounter{pieSliceA}{0}%
|
|
\setcounter{pieSliceB}{0}%
|
|
\foreach \xi/\t [count=\xk from 0] in {#1} {
|
|
% Get colors
|
|
\pgfmathparse{1000 / (\numElements - 1) * \xk}
|
|
\extractcolormapcolor{pieColor\xk}{\pgfmathresult}
|
|
\pgfmathparse{(\xk / \numElements < 0.5)*1000}
|
|
\extractcolormapcolor{pieTextColor\xk}{\pgfmathresult}
|
|
|
|
% Draw slice
|
|
\setcounter{pieSliceA}{\thepieSliceB}
|
|
\addtocounter{pieSliceB}{\xi}
|
|
\slice{\thepieSliceA/100*360}{\thepieSliceB/100*360}{\xi\%}{\t}{pieColor\xk}{pieTextColor\xk}
|
|
}
|
|
}
|
|
|
|
\newcommand{\csvPie}[1]{
|
|
% Count elements
|
|
\setcounter{pieElem}{0}%
|
|
\csvreader[head to column names]{#1}{}{%
|
|
\stepcounter{pieElem}
|
|
}
|
|
\edef\numElements{\arabic{pieElem}}
|
|
|
|
% Draw pie chart
|
|
\setcounter{pieElem}{0}%
|
|
\setcounter{pieSliceA}{0}%
|
|
\setcounter{pieSliceB}{0}%
|
|
\csvreader[head to column names]{#1}{}{%
|
|
% Get colors
|
|
\pgfmathparse{1000 / (\numElements - 1) * \thepieElem}
|
|
\extractcolormapcolor{pieColor\thepieElem}{\pgfmathresult}
|
|
\pgfmathparse{(\thepieElem / \numElements < 0.5)*1000}
|
|
\extractcolormapcolor{pieTextColor\thepieElem}{\pgfmathresult}
|
|
|
|
% Draw slice
|
|
\setcounter{pieSliceA}{\thepieSliceB}
|
|
\addtocounter{pieSliceB}{10*\real{\value}}
|
|
\slice{\thepieSliceA/1000*360}{\thepieSliceB/1000*360}{\value\%}{\category}
|
|
{pieColor\thepieElem}{pieTextColor\thepieElem}
|
|
|
|
\stepcounter{pieElem}
|
|
}
|
|
}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%%%%%%% Actual Document %%%%%%%%%
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
|
|
\title{Expense Report\vspace{-1cm}}
|
|
\author{}
|
|
|
|
|
|
\begin{document}
|
|
|
|
\maketitle
|
|
\vspace{1cm}
|
|
|
|
\begin{figure}[H]
|
|
\centering
|
|
|
|
\begin{tikzpicture}[scale=2.5]
|
|
\csvPie{category_overview.csv}
|
|
\end{tikzpicture}
|
|
|
|
\caption{Total percenteage of expenses by category}
|
|
\end{figure}
|
|
|
|
\begin{figure}[H]
|
|
\centering
|
|
|
|
\begin{subfigure}[t]{\textwidth}
|
|
\centering
|
|
|
|
\begin{tikzpicture}
|
|
\begin{axis}[
|
|
date coordinates in=x,
|
|
width=\textwidth,
|
|
height=0.375\textwidth,
|
|
ylabel={Net income in €},
|
|
y label style={at={(-0.1,0.5)},anchor=south},
|
|
xticklabel=\month.\shortyear{\year},
|
|
xtick=data,
|
|
xticklabel style={
|
|
rotate=60,
|
|
anchor=near xticklabel,
|
|
},
|
|
grid,
|
|
enlarge x limits=0.03,
|
|
]
|
|
% Dummy plot to set x axis ticks
|
|
\addplot[draw=none]
|
|
table[col sep=comma, x=t, y=net]
|
|
{net_income.csv};
|
|
|
|
% Dummy plot to set x axis scale
|
|
\addplot[draw=none]
|
|
table[col sep=comma, x=t, y expr=0]
|
|
{detailed_balance.csv};
|
|
|
|
\addplot[ybar, bar width=0.4cm, draw=none, fill=scol2!30, line width=1pt]
|
|
table[col sep=comma, x=t, y=income]
|
|
{net_income.csv};
|
|
\addplot[ybar, bar width=0.4cm, draw=none, fill=scol0!30, line width=1pt]
|
|
table[col sep=comma, x=t, y=expenses]
|
|
{net_income.csv};
|
|
\addplot[ybar, bar width=0.3cm, draw=none, fill=scol0, line width=1pt]
|
|
table[col sep=comma, x=t, y=net, discard if gt={net}{0}]
|
|
{net_income.csv};
|
|
\addplot[ybar, bar width=0.3cm, draw=none, fill=scol2, line width=1pt]
|
|
table[col sep=comma, x=t, y=net, discard if lt={net}{0}]
|
|
{net_income.csv};
|
|
\end{axis}
|
|
\end{tikzpicture}
|
|
\end{subfigure}
|
|
\begin{subfigure}[t]{\textwidth}
|
|
\centering
|
|
|
|
\begin{tikzpicture}
|
|
\begin{axis}[
|
|
date coordinates in=x,
|
|
width=\textwidth,
|
|
height=0.375\textwidth,
|
|
ylabel={Total balance in €},
|
|
y label style={at={(-0.1,0.5)},anchor=south},
|
|
xticklabel=\month.\shortyear{\year},
|
|
xtick=data,
|
|
enlarge x limits=0.03,
|
|
xticklabel style={
|
|
rotate=60,
|
|
anchor=near xticklabel,
|
|
},
|
|
grid,
|
|
]
|
|
% Dummy plot to set x axis ticks
|
|
\addplot[draw=none]
|
|
table[col sep=comma, x=t, y=value]
|
|
{total_value.csv};
|
|
|
|
\addplot[scol3, mark=none, line width=1pt]
|
|
table[col sep=comma, x=t, y=value]
|
|
{detailed_balance.csv};
|
|
\addplot[scol1, mark=none, line width=1pt]
|
|
table[col sep=comma, x=t, y=value]
|
|
{total_value.csv};
|
|
\end{axis}
|
|
\end{tikzpicture}
|
|
\end{subfigure}
|
|
|
|
\caption{Development of account balance over time}
|
|
\end{figure}
|
|
|
|
\begin{figure}
|
|
\centering
|
|
|
|
|
|
\csvautotabular{net_income.csv}
|
|
\end{figure}
|
|
|
|
|
|
\begin{figure}[H]
|
|
\centering
|
|
|
|
% Read table
|
|
\pgfplotstableread[col sep=comma]{expenses_by_category.csv}\expbycattable
|
|
\pgfplotstablegetcolsof{\expbycattable}
|
|
\pgfmathtruncatemacro\NumCols{\pgfplotsretval-1}
|
|
|
|
\begin{subfigure}[c]{\textwidth}
|
|
\centering
|
|
|
|
\begin{tikzpicture}
|
|
\begin{axis}[
|
|
stack plots=y,
|
|
area style,
|
|
date coordinates in=x,
|
|
width=\textwidth,
|
|
height=0.375\textwidth,
|
|
xticklabel=\month.\shortyear{\year},
|
|
xtick=data,
|
|
enlargelimits=false,
|
|
xticklabel style={
|
|
rotate=60,
|
|
anchor=near xticklabel,
|
|
},
|
|
legend columns=5,
|
|
legend style={at={(0.5,-0.6)},anchor=south},
|
|
ylabel={Expenses in €},
|
|
ymin=0,
|
|
]
|
|
% For each
|
|
\pgfplotsinvokeforeach{0,...,\NumCols/2 -1}{
|
|
% Define color
|
|
\pgfmathparse{1000 / (\NumCols/2 -1) * #1}
|
|
\extractcolormapcolor{tempcol#1}{\pgfmathresult}
|
|
|
|
% Add plot
|
|
\addplot+[tempcol#1]
|
|
table[col sep=comma, x=t, y index=#1]
|
|
{\expbycattable} \closedcycle;
|
|
|
|
% Add legend entry (https://tex.stackexchange.com/a/405018)
|
|
\pgfplotstablegetcolumnnamebyindex{#1}\of{\expbycattable}\to\pgfplotsretval
|
|
\expandafter\addlegendentry\expandafter{\pgfplotsretval}
|
|
}
|
|
\end{axis}
|
|
\end{tikzpicture}
|
|
\end{subfigure}\\[1em]
|
|
\begin{subfigure}[c]{\textwidth}
|
|
\centering
|
|
|
|
\begin{tikzpicture}
|
|
\begin{axis}[
|
|
stack plots=y,
|
|
area style,
|
|
date coordinates in=x,
|
|
width=\textwidth,
|
|
height=0.375\textwidth,
|
|
xticklabel=\month.\shortyear{\year},
|
|
xtick=data,
|
|
enlargelimits=false,
|
|
xticklabel style={
|
|
rotate=60,
|
|
anchor=near xticklabel,
|
|
},
|
|
legend columns=5,
|
|
legend style={at={(0.5,-0.6)},anchor=south},
|
|
ylabel={Expenses in €},
|
|
ymin=0,
|
|
]
|
|
% For each
|
|
\pgfplotsinvokeforeach{\NumCols/2,...,\NumCols-1}{
|
|
% Define color
|
|
\pgfmathparse{1000 * (#1 - \NumCols/2) / (\NumCols-1 - \NumCols/2)}
|
|
\extractcolormapcolor{tempcol#1}{\pgfmathresult}
|
|
|
|
% Add plot
|
|
\addplot+[tempcol#1]
|
|
table[col sep=comma, x=t, y index=#1]
|
|
{\expbycattable} \closedcycle;
|
|
|
|
% Add legend entry (https://tex.stackexchange.com/a/405018)
|
|
\pgfplotstablegetcolumnnamebyindex{#1}\of{\expbycattable}\to\pgfplotsretval
|
|
\expandafter\addlegendentry\expandafter{\pgfplotsretval}
|
|
}
|
|
\end{axis}
|
|
\end{tikzpicture}
|
|
\end{subfigure}
|
|
|
|
\caption{Expenses by category}
|
|
\end{figure}
|
|
|
|
\end{document}
|
|
|