如何绘制一个带有索引的二维数组?

如何绘制一个带有索引的二维数组?

现在,我有下面的代码来实现这一点

在此处输入图片描述

但是,我想做两件事。第一,将索引改为在框上方而不是下方。第二,添加更多行,以便这是一个 2D 数组,希望行和列之间的间距不同。

基本上,我想要这个,但是每一行都不同。 在此处输入图片描述

任何帮助都将不胜感激!

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\newcounter{index}

\begin{document}

\begin{figure}
\centering
  \begin{tikzpicture}
    \setcounter{index}{0}
    \coordinate (s) at (0,0);
    \foreach \num in {3, 1, 4, 1, 5}{
      \node[minimum size=6mm, draw, rectangle] at (s) {\num};
      \node at ($(s)-(0,0.5)$) {\theindex};
      \stepcounter{index}
      \coordinate (s) at ($(s) + (1,0)$);
    }
  \end{tikzpicture}
  \label{fig:testArray}
\end{figure}

\end{document}

答案1

如果节点内容是规定的话,这只是图像的一部分。使用矩阵:

在此处输入图片描述

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix, positioning}

\usepackage[active,floats, tightpage]{preview}
    \setlength\PreviewBorder{1em}

\begin{document}
    \begin{figure}
\centering
  \begin{tikzpicture}
\matrix (m) [matrix of nodes,
             nodes={minimum size=8mm},
             column sep=4mm]
{
0 & 1 & 2 & 3 & 4   \\
};
\matrix (n) [below=-3mm of m,
             matrix of nodes,
             nodes={draw, minimum size=8mm},
             column sep=4mm,
             row sep=2mm]
{
9 & 2 & 4 & 4 & 5   \\
8 & 3 & 3 & 5 & 5   \\
7 & 4 & 2 & 7 & 5   \\
6 & 5 & 1 & 1 & 5   \\
5 & 6 & 0 & 2 & 5   \\
};
\end{tikzpicture}
    \label{fig:testArray}
    \end{figure}
\end{document}

附录: 受到启发伊格纳西 答案和他的问题问题。现在有一个矩阵和索引作为第一行节点的标签::

\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary{matrix}

\begin{document}
\begin{tikzpicture}

\matrix [matrix of nodes,
         nodes = {draw,  minimum size = 2ex},
         column sep=1ex, row sep=1ex,
         row 1/.style={execute at begin cell= {|[label=\pgfmathparse{int(\the\pgfmatrixcurrentcolumn-1)}\pgfmathresult]|}}
         ]
{
9 & 2 & 4 & 4 & 5   \\
8 & 3 & 3 & 5 & 5   \\
7 & 4 & 2 & 7 & 5   \\
6 & 5 & 1 & 1 & 5   \\
5 & 6 & 0 & 2 & 5   \\
};
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

此解决方案与 Zarko 的解决方案类似,但仅使用一个matrix。第一行用于列枚举,其他所有行都是真实矩阵内容。由于我们希望除第一行之外的所有节点都有边框,因此定义了一种特殊样式:row 1/.style={nodes={draw=none}}

col sep列和行之间的距离用和声明row sep,但可以使用特殊命令更改:[value]在第一行元素中或在行声明结束后:\\。在下面的代码中有一些示例,其中两个只是为了展示其效果,但[-3mm]在第一行之后已用于补偿第一行节点的大小并使它们看起来像一个标签。

\documentclass[tikz, border=1em]{standalone}
\usetikzlibrary{matrix, positioning}

\begin{document}
\begin{tikzpicture}
\matrix (m) [matrix of nodes,
             nodes={draw, minimum size=8mm},
             column sep=3mm,
             row sep=2mm,
             row 1/.style={nodes={draw=none}}]
{
0 & 1 & 2 &[5mm] 3 & 4   \\[-3mm]
9 & 2 & 4 & 4 & 5   \\
8 & 3 & 3 & 5 & 5   \\
7 & 4 & 2 & 7 & 5   \\[3mm]
6 & 5 & 1 & 1 & 5   \\
5 & 6 & 0 & 2 & 5   \\
};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容