\begin{tikzpicture} [%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% box/.style={rectangle,draw=black,thick, minimum size=1cm}, y=-1cm ]%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\size{10} \foreach \k in {1,2,...,\size}{ \foreach \n in {1,2,...,\size} { \node[box, fill = white] at (\k,\n){}; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Stable Range \pgfmathtruncatemacro{\jk}{\k+1} \pgfmathtruncatemacro{\jn}{2*\n} \ifthenelse{\jk < \jn}{\node[box, fill = blue!50] at (\k,\n){};}{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% k < n \ifthenelse{\k < \n}{\node[box, fill = gray!50] at (\k,\n){};}{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% k = n \ifthenelse{\k = 1 \AND \n = 1}{\node[box, fill = green!50] at (\k,\n){};}{} \ifthenelse{\k = 2 \AND \n = 2}{\node[box, fill = green!50] at (\k,\n){};}{} \ifthenelse{\k = 3 \AND \n = 2}{\node[box, fill = green!50] at (\k,\n){};}{} \ifthenelse{\k = 3 \AND \n = 3}{\node[box, fill = green!50] at (\k,\n){};}{} \ifthenelse{\k = \n}{\node[box, fill = green!50] at (\k,\n){};}{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% S^1 \ifthenelse{\n = 1 \AND \k > 1}{\node[box, fill = gray!50] at (\k,\n){};}{} } } \node at (1,0){$k=1$}; \node at (-0.25,1){$n=1$}; \foreach \t in {2,3,...,\size}{ \node at (-0.25,\t){\t}; \node at (\t,0){\t}; } \node at (-0.25,\size+1){$\vdots$}; \node at (\size+1,0){$\cdots$}; \node at (\size/2, -1.5){\Huge $\pi_k(S^n)$}; \draw[fill=orange, dashed] (2,2) -- (10, 10); \draw[fill=orange, dashed] (4, 3) -- (10, 9); \draw[fill=orange, dashed] (6,4) -- (10, 8); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% k < n \end{tikzpicture}