\definecolor{mypurple}{RGB}{128,0,128}
\begin{tikzpicture}
    \tikzstyle{model}=[circle,draw=none,fill=gray, thick]
    \tikzstyle{split}=[>=stealth,->, thick, draw=blueind]
    \tikzstyle{merge}=[>=stealth,->,thick, draw=red]
    \draw[step=1cm, help lines] (-2,-2) grid (2,2);
    \onslide<1-7>{
        \node[model] (mode) at (0,0) {{\color{red}X}};
    }

    % Axes
    \draw[>=to,->,thick] (-2,-2) -- +(1,0);
    \node[font=\small, fill=none] (Q_1) at (-0.75,-2) {$Q_1$};
    \draw[>=to,->,thick] (-2,-2) -- +(0,1);
    \node[font=\small, fill=none] (Q_2) at (-2,-0.75) {$Q_2$};

    \onslide<2-8>{
        \draw[color=red, line width=1pt] (-1.5,-1.5) rectangle ++(3,3);
    }
    \onslide<3>{
        \node[model] (bottom_left) at (-1,-1) {};
        \node[model, opacity=0.6] (row_1) at (0,-1) {};
        \node[model, opacity=0.6] (col_1) at (-1,0) {};

        \draw[split] (bottom_left) -- (col_1);
        \draw[split] (-1.75,0) -- (col_1);
        \draw[split] (bottom_left) -- (row_1);
        \draw[split] (0,-1.75) -- (row_1);
    }
    \onslide<4-7>{
        \node[model] (bottom_left) at (-1,-1) {};
        \node[model, draw=blueind] (row_1) at (0,-1) {};
        \node[model, draw=blueind] (col_1) at (-1,0) {};
    }
    \onslide<4>{
        \node[model, opacity=0.6] (row_2) at (1,-1) {};
        \node[model, opacity=0.6] (col_2) at (-1,1) {};

        \draw[split] (col_1) -- (col_2);
        \draw[split] (-1.75,1) -- (col_2);
        \draw[split] (row_1) -- (row_2);
        \draw[split] (1,-1.75) -- (row_2);
        \draw[split] (row_1) -- (mode);
        \draw[split] (col_1) -- (mode);
    }
    \onslide<5-7>{
        \node[model, draw=blueind] (row_2) at (1,-1) {};
        \node[model, draw=blueind] (col_2) at (-1,1) {};
        \node[model, draw=blueind] (mode) at (0,0) {{\color{red}X}};
    }
    \onslide<5>{
        \node[model, opacity=0.6] (row_3) at (1,0) {};
        \node[model, opacity=0.6] (col_3) at (0,1) {};

        \draw[split] (col_2) -- (col_3);
        \draw[split] (row_2) -- (row_3);
        \draw[split] (mode) -- (row_3);
        \draw[split] (mode) -- (col_3);
    }
    \onslide<6-7>{
        \node[model, draw=blueind] (row_3) at (1,0) {};
        \node[model, draw=blueind] (col_3) at (0,1) {};
    }
    \onslide<6>{
        \node[model, opacity=0.6] (top_right) at (1,1) {};
        \draw[split] (col_3) -- (top_right);
        \draw[split] (row_3) -- (top_right);
    }
    \onslide<7>{
        \node[model, draw=blueind] (top_right) at (1,1) {};
    }
    \onslide<8>{
        \node[model, draw=mypurple] (top_right) at (1,1) {};
        \node[model, draw=mypurple] (row_3) at (1,0) {};
        \node[model, draw=mypurple] (col_3) at (0,1) {};
        \node[model, draw=mypurple] (row_2) at (1,-1) {};
        \node[model, draw=mypurple] (col_2) at (-1,1) {};
        \node[model, draw=mypurple] (mode) at (0,0) {{\color{red}X}};
        \node[model, draw=red] (bottom_left) at (-1,-1) {};
        \node[model, draw=mypurple] (row_1) at (0,-1) {};
        \node[model, draw=mypurple] (col_1) at (-1,0) {};

        \draw[merge] (1,1.75) -- (top_right);
        \draw[merge] (1.75,1) -- (top_right);
        \draw[merge] (0,1.75) -- (col_3);
        \draw[merge] (1.75,0) -- (row_3);
        \draw[merge] (1.75,-1) -- (row_2);
        \draw[merge] (-1,1.75) -- (col_2);

        \draw[merge] (top_right) -- (col_3);
        \draw[merge] (top_right) -- (row_3);
        \draw[merge] (col_3) -- (col_2);
        \draw[merge] (row_3) -- (row_2) ;
        \draw[merge] (row_3) -- (mode);
        \draw[merge] (col_3) -- (mode);
        \draw[merge] (col_2) --(col_1);
        \draw[merge] (row_2) -- (row_1);
        \draw[merge] (mode) -- (row_1);
        \draw[merge] (mode) -- (col_1);
        \draw[merge] (col_1) -- (bottom_left);
        \draw[merge] (row_1) -- (bottom_left);
    }
    \onslide<9>{
        \node[model, draw=mypurple] (top_right) at (1,1) {};
        \node[model, draw=mypurple] (new_mode) at (1,0) {{\color{red}X}};
        \node[model, draw=mypurple] (col_3) at (0,1) {};
        \node[model, draw=mypurple] (row_2) at (1,-1) {};
        \node[model, draw=mypurple] (col_2) at (-1,1) {};
        \node[model, draw=mypurple] (old_mode) at (0,0) {};
        \node[model, draw=red] (bottom_left) at (-1,-1) {};
        \node[model, draw=mypurple] (row_1) at (0,-1) {};
        \node[model, draw=mypurple] (col_1) at (-1,0) {};
    }
    \onslide<10>{
        \draw[color=red, line width=1pt] (-0.5,-1.5) rectangle ++(3,3);

        \node[model, draw=mypurple] (top_right) at (1,1) {};
        \node[model, draw=mypurple] (new_mode) at (1,0) {{\color{red}X}};
        \node[model, draw=mypurple] (col_3) at (0,1) {};
        \node[model, draw=mypurple] (row_2) at (1,-1) {};
        \node[model, draw=mypurple] (col_2) at (-1,1) {};
        \node[model, draw=mypurple] (old_mode) at (0,0) {};
        \node[model, draw=red] (bottom_left) at (-1,-1) {};
        \node[model, draw=mypurple] (row_1) at (0,-1) {};
        \node[model, draw=mypurple] (col_1) at (-1,0) {};
    }
\end{tikzpicture}