\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\mplibnumbersystem{double}
\begin{mplibcode}
vardef fizz(expr X) =
 pair m, n; m = right; n = origin;
 numeric x; x = X;
 forever:
   exitif x = 0;
   m := m zscaled (-1/2, -1/2);
   if odd x:
     n := n + m;
   fi
   x := x div 2;
 endfor
 n
enddef;
beginfig(1);
 numeric s, t; s = 256; t = 4;
 for n=0 upto (s/t*s/t-1):
   draw fizz(n) scaled s
     withpen pencircle scaled t
     withcolor ((7+n mod 8)/16)[1/2 blue, white];
 endfor;
 path xx, yy;
 xx = (left--right) scaled (s+8);
 yy = xx rotated 90;
 for i=-1 upto 1:
   draw xx shifted (0, s*i) withpen pencircle scaled 1/8;
   draw yy shifted (s*i, 0) withpen pencircle scaled 1/8;
   if i=0:
     dotlabel.lrt("$-i$", (i, -1) scaled s);
     dotlabel.lrt("$+i$", (i, +1) scaled s);
   else:
     dotlabel.lrt("$" & decimal i & "-i$", (i,-1) scaled s);
     dotlabel.lrt("$" & decimal i & "$", (i, 0) scaled s);
     dotlabel.lrt("$" & decimal i & "+i$", (i, 1) scaled s);
   fi
 endfor
endfig;
\end{mplibcode}
\end{document}