[Tex/LaTex] Highlight elements in the matrix in tikz

highlightingtikz-matrixtikz-pgf

I have a matrix and need to highlight some elements in the matrix as in the example.
Exemple
Thanks

\documentclass{beamer}

\usepackage{tikz}
\usetikzlibrary{calc,arrows,automata,positioning} 

\usepackage{blkarray}

\begin{document}

\begin{frame}{Example}

\begin{figure}[H]
\centering

\begin{tabular}{c c}

    \begin{minipage}{.5\linewidth}
       \scalebox{0.5}{
       $
\renewcommand\arraystretch{1.3}
\begin{blockarray}{ccccccc}
 & 1 & 2 & 3 & 4 & 5 & 6  \\
\begin{block}{@{}c\{[ccccc]c}
1 & 0 & 1 & 0 & 0 & 0 & 0  \\
2 & 0 & 0 & 1 & 0 & 1 & 0  \\
3 & 0 & 0 & 0 & 1 & 0 & 0  \\
4 & 0 & 0 & 0 & 0 & 0 & 0  \\
5 & 1 & 0 & 0 & 0 & 0 & 1  \\
6 & 0 & 1 & 0 & 0 & 0 & 0  \\
\end{block}
s & 1 & 2 & 2 & 2 & 2 \\
\end{blockarray}
$
      }
    \end{minipage}


    \begin{minipage}{.5\linewidth}
        \scalebox{0.5}{
       $
\renewcommand\arraystretch{1.3}
\begin{blockarray}{ccccccc}
 & 1 & 2 & 3 & 4 & 5 & 6  \\
\begin{block}{@{}c\{[ccccc]c}
1 & 0 & 1 & 0 & 0 & 0 & 0  \\
2 & 0 & 0 & 1 & 0 & 1 & 0  \\
3 & 0 & 0 & 0 & 1 & 0 & 0  \\
4 & 0 & 0 & 0 & 0 & 0 & 0  \\
5 & 1 & 0 & 0 & 0 & 0 & 1  \\
6 & 0 & 1 & 0 & 0 & 0 & 0  \\
\end{block}
s & 1 & 2 & 2 & 2 & 2 \\
\end{blockarray}
$
      }
    \end{minipage}

\end{tabular}

\caption{Example}

\end{figure}

\end{frame}

\end{document}

Best Answer

One possibility is to set nodes and then do the highlighting with overlays.

\documentclass{beamer}

\usepackage{tikz}
\usetikzlibrary{calc,arrows,automata,positioning,fit} 

\newcommand{\tikznode}[2]{\relax
\ifmmode%
  \tikz[remember picture,baseline=(#1.base),inner sep=0pt] \node (#1) {$%\tikznodestyle 
  #2$};
\else
  \tikz[remember picture,baseline=(#1.base),inner sep=0pt] \node (#1) {#2};%
\fi}

\usepackage{blkarray}

\begin{document}

\begin{frame}{Example}

\begin{figure}[H]
\centering

\begin{columns}
\begin{column}{.5\linewidth}
       \scalebox{0.5}{
       $
\renewcommand\arraystretch{1.3}
\begin{blockarray}{ccccccc}
 & 1 & 2 & 3 & 4 & 5 & \tikznode{1}{6}  \\
\begin{block}{@{}c\{[ccccc]c}
1 & 0 & 1 & 0 & 0 & 0 & 0  \\
2 & 0 & 0 & 1 & 0 & 1 & 0  \\
3 & 0 & 0 & 0 & 1 & 0 & 0  \\
4 & 0 & 0 & 0 & 0 & 0 & 0  \\
5 & 1 & 0 & 0 & 0 & 0 & 1  \\
6 & 0 & 1 & 0 & 0 & 0  & \tikznode{2}{0} \\
\end{block}
\tikznode{s}{s} & 1 & 2 & 2 & 2 & \tikznode{3}{2} \\
\end{blockarray}
$
\tikz[overlay,remember picture]{
\node[fill=blue,opacity=0.3,fit=(1) (2)]{}; 
\node[fill=blue,opacity=0.3,fit=(s) (3)]{}; }
      }
    \end{column}
    \begin{column}{.5\linewidth}
        \scalebox{0.5}{
       $
\renewcommand\arraystretch{1.3}
\begin{blockarray}{ccccccc}
 & 1 & 2 & 3 & 4 & 5 & \tikznode{5}{6}  \\
\begin{block}{@{}c\{[ccccc]c}
1 & \tikznode{A}{0} & 1 & 0 & 0 & 0 & 0  \\
2 & 0 & 0 & 1 & 0 & 1 & 0  \\
3 & 0 & 0 & 0 & 1 & 0 & 0  \\
4 & 0 & 0 & 0 & 0 & 0 & 0  \\
5 & 1 & 0 & 0 & 0 & \tikznode{B}{0}  & 1  \\
6 & 0 & 1 & 0 & 0 & 0 & \tikznode{6}{0}  \\
\end{block}
\tikznode{7}{s} & 1 & 2 & 2 & 2 & \tikznode{8}{2} \\
\end{blockarray}
$
\tikz[overlay,remember picture]{
\node[fill=green,opacity=0.3,fit=(5) (6)]{}; 
\node[fill=green,opacity=0.3,fit=(7) (8)]{}; 
\path let \p1=(A), \p2=(B), \n1={atan2(\y2-\y1,\x2-\x1)} in
node[fill=red,opacity=0.3,rotate fit=\n1,fit=(A) (B)]{}; }
      }
    \end{column}
\end{columns}

\caption{Example}

\end{figure}

\end{frame}

\end{document}

enter image description here

Related Question