In the template I am using I did use the pgfplots:
The following chuck of fortran code generate the templates:
open(unitno, file=trim(fpath) // trim(tikz),status='unknown')
write(unitno, *) "\documentclass[tikz]{standalone}"
write(unitno, *) "\usepackage{tikz}"
write(unitno, *) "\usepackage{pgfplots}"
write(unitno, *) "\usetikzlibrary{decorations}"
write(unitno, *) "\usetikzlibrary{decorations.pathreplacing, intersections, fillbetween}"
write(unitno, *) "\usetikzlibrary{calc,positioning}"
write(unitno, *) "\pgfplotsset{compat=newest, scale only axis, width = 13cm, height = 6cm}"
write(unitno, *) "\pgfplotsset{sciclean/.style={axis lines=left,"
write(unitno, *) " axis x line shift=0.5em,"
write(unitno, *) " axis y line shift=0.5em,"
write(unitno, *) " axis line style={-,very thin},"
write(unitno, *) " axis background/.style={draw,ultra thin,gray},"
write(unitno, *) " tick align=outside,"
write(unitno, *) " xtick distance=" // num2str(xticsdist) // ","
write(unitno, *) " ytick distance=" // num2str(yticsdist) // ","
write(unitno, *) " major tick length=2pt}}"
write(unitno, *) ""
write(unitno, *) "% Create fake \onslide and other commands for standalone picture"
write(unitno, *) "\usepackage{xparse}"
write(unitno, *) "\NewDocumentCommand{\onslide}{s t+ d<>}{}"
write(unitno, *) "\NewDocumentCommand{\only}{d<>}{}"
write(unitno, *) "\NewDocumentCommand{\uncover}{d<>}{}"
write(unitno, *) "\NewDocumentCommand{\visible}{d<>}{}"
write(unitno, *) "\NewDocumentCommand{\invisible}{d<>}{}"
write(unitno, *) ""
write(unitno, *) "\makeatletter"
write(unitno, *) "\tikzset{"
write(unitno, *) "Sloped/.code = {"
write(unitno, *) "\iftikz@fullytransformed% tikz.code.tex"
write(unitno, *) " \tikzset{sloped}"
write(unitno, *) "\else"
write(unitno, *) " \pgfgettransformentries{\mya}{\myb}{\myc}{\myd}{\mys}{\myt}%"
write(unitno, *) " \tikzset{sloped, transform shape, rotate = {atan2(\myb,\mya)}}%"
write(unitno, *) "\fi"
write(unitno, *) "}"
write(unitno, *) "}"
write(unitno, *) "\makeatother"
write(unitno, *) ""
write(unitno, *) "% ---------------------------------------------------------------------"
write(unitno, *) "% Coordinate extraction"
write(unitno, *) "% #1: node name"
write(unitno, *) "% #2: output macro name: x coordinate"
write(unitno, *) "% #3: output macro name: y coordinate"
write(unitno, *) "\newcommand{\Getxycoords}[3]{%"
write(unitno, *) " \pgfplotsextra{%"
write(unitno, *) " % using `\pgfplotspointgetcoordinates' stores the (axis)"
write(unitno, *) " % coordinates in `data point' which then can be called by"
write(unitno, *) " % `\pgfkeysvalueof' or `\pgfkeysgetvalue'"
write(unitno, *) " \pgfplotspointgetcoordinates{(#1)}%"
write(unitno, *) " % `\global' (a TeX macro and not a TikZ/PGFPlots one) allows to"
write(unitno, *) " % store the values globally"
write(unitno, *) " \global\pgfkeysgetvalue{/data point/x}{#2}%"
write(unitno, *) " \global\pgfkeysgetvalue{/data point/y}{#3}%"
write(unitno, *) " }%"
write(unitno, *) "}"
write(unitno, *) "% ---------------------------------------------------------------------"
write(unitno, *) ""
write(unitno, *) "\begin{document}"
write(unitno, *) ""
write(unitno, *) "\begin{tikzpicture}"
write(unitno, *) ""
write(unitno, *) ""
write(unitno, *) "\begin{axis}["
write(unitno, *) " sciclean,"
write(unitno, *) " xlabel = {" // xlb // "},"
write(unitno, *) " ylabel = {" // ylb // "},"
write(unitno, *) " xmin = " // num2str(xmin) // ","
write(unitno, *) " xmax = " // num2str(xmax) // ","
write(unitno, *) " ymin = " // num2str(ymin) // ","
write(unitno, *) " ymax = " // num2str(ymax) // ","
write(unitno, *) " legend cell align = left,"
write(unitno, *) " legend pos = south east,"
write(unitno, *) " title = {" // title // "}]"
write(unitno, *) ""
write(unitno, *) ""
call plotting(unitno, nj, palette, cnames, fpath, dat, legend)
write(unitno, *) ""
write(unitno, *) ""
write(unitno, *) "\end{axis}"
write(unitno, *) ""
write(unitno, *) ""
write(unitno, *) "\end{tikzpicture}"
write(unitno, *) ""
write(unitno, *) "\end{document}"
close(unitno)