If I may add a tiny cherry (a cat guru taught me once) on the beautiful answer by user240002...
To avoid using (annoying IMHO, \pgfmathsetmacro
), include the variables to evaluate directly in the loop.
\documentclass[tikz,border=3mm]{standalone}
\usepackage{tikz-3dplot}
\tikzset{pics/3d bar/.style={code={%
\tikzset{3d bar/.cd,#1}
\path[3d bar/x face] (\mydx/2,\mydy/2,0) -- (\mydx/2,\mydy/2,\myh)
-- (-\mydx/2,\mydy/2,\myh) -- (-\mydx/2,\mydy/2,0) -- cycle;
\path[3d bar/y face] (\mydx/2,\mydy/2,0) -- (\mydx/2,\mydy/2,\myh)
-- (\mydx/2,-\mydy/2,\myh) -- (\mydx/2,-\mydy/2,0) -- cycle;
\path[3d bar/z face] (\mydx/2,\mydy/2,\myh) -- (-\mydx/2,\mydy/2,\myh)
-- (-\mydx/2,-\mydy/2,\myh) -- (\mydx/2,-\mydy/2,\myh) -- cycle;
}},3d bar/.cd,dx/.store in=\mydx,dx=1,dy/.store in=\mydy,dy=1,
h/.store in=\myh,h=1,x face/.style={draw=blue!50,fill=cyan!20},
y face/.style={draw=blue!50,fill=cyan!50},
z face/.style={draw=blue!50,fill=cyan!30}}
\begin{document}
\tdplotsetmaincoords{70}{110}%
\begin{tikzpicture}[tdplot_main_coords]
\begin{scope}[declare function={f(\x,\y)=1+3*exp(-\x/5-\y/4);% function
n=5;% steps
xmin=0;xmax=5;ymin=0;ymax=5;}]
\pgfmathtruncatemacro{\myn}{n}
\tikzset{3d bar/dx/.evaluated={(xmax-xmin)/n},
3d bar/dy/.evaluated={(ymax-ymin)/n}}
\foreach \i in {1,...,\myn}
{% here
\foreach [evaluate ={
\myx = xmin+(\i-0.5)*(xmax-xmin)/\myn ;
\myy = ymin+(\j-0.5)*(ymax-ymin)/\myn ;
\myf = f(\myx,\myy) ;
}] \j in {0,...,\myn}
{\path (\myx,\myy,0) pic{3d bar={h=\myf}};}
}
\end{scope}
%
\begin{scope}[xshift=7cm,
declare function={f(\x,\y)=0.5+3*exp(-\x/5-\y/4);% function
n=20;% steps
xmin=0;xmax=5;ymin=0;ymax=5;}]
\pgfmathtruncatemacro{\myn}{n}
\tikzset{3d bar/dx/.evaluated={(xmax-xmin)/n},
3d bar/dy/.evaluated={(ymax-ymin)/n}}
\foreach \i in {1,...,\myn}
{% here
\foreach [evaluate ={
\myx = xmin+(\i-0.5)*(xmax-xmin)/\myn ;
\myy = ymin+(\j-0.5)*(ymax-ymin)/\myn ;
\myf = f(\myx,\myy) ;
}] \j in {0,...,\myn}
{\path (\myx,\myy,0) pic{3d bar={h=\myf}};}
}
\end{scope}
\end{tikzpicture}
\end{document}
More details in pfg manual v3.1.5.b p1003, section 89 Repeating Things: The Foreach Statement.
