Ein Lösungvorschlag mit dem bereits genannten Paket pgf/TikZ, aber ohne dessen Matrix:
\documentclass[tikz, border=5pt]{standalone}
\newcommand{\xlen}{5mm}
\newcommand{\ylen}{4/5*\xlen}
\begin{document}
\begin{tikzpicture}[
font=\sffamily,
x=\xlen, y=\ylen,
node size/.style={
minimum width=\xlen,
minimum height=\ylen
}
]
\foreach \x in {1,...,5}
\foreach \y in {\x,...,5}
\node [draw, node size] at (\x,-\y) (\x\y) {};
\foreach \rowColNum in {1,...,5}
\path
(\rowColNum5) node [below=\ylen/2] {\rowColNum}
(1\rowColNum) node [left=\xlen/2] {\the\numexpr\rowColNum+1}
;
\end{tikzpicture}
\end{document}
Ein weiterer Vorschlag:
\documentclass[tikz, border=5pt]{standalone}
\newcommand{\xlen}{5mm}
\newcommand{\ylen}{4/5*\xlen}
\begin{document}
\begin{tikzpicture}[
font=\sffamily,
x=\xlen, y=\ylen,
node size/.style={
minimum width=\xlen,
minimum height=\ylen
},
conditional label/.code={
\ifnum\x=1
\pgfkeysalso{label=left:\the\numexpr\y+1}
\fi
\ifnum\y=5
\pgfkeysalso{label=below:\x}
\fi
}
]
\foreach \x in {1,...,5}
\foreach \y in {\x,...,5}
\node [
draw,
node size,
conditional label
] at (\x,-\y) (\x\y) {};
\end{tikzpicture}
\end{document}