# Fully connected network diagram

I'm trying to draw a fully connected network diagram. I've been using the source code from this answer ( Neural Network representation) however, if I create new nodes the nodes do not attach themselves to each other node automatically.

EDIT:

I have this so far (this code is modified from the answer that I have linked to above):

\documentclass{article}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}
%%Create a style for the arrows we are using
\tikzset{normal arrow/.style={draw, thin}}
%%Create the different coordinates to place the nodes
\path (0,0) coordinate (1) ++(0,-2) coordinate (2) ++(0,-2) coordinate (3);
\path (1) ++(-3,-.2) coordinate (x1);
\path (3) ++(-3, .2) coordinate (x2);
%%Use the calc library and partway modifiers to generate the second and third level points
\path ($(1)!.5!(2)!3 cm!90:(2)$) coordinate (4);
\path ($(2)!.5!(3)!3 cm!90:(3)$) coordinate (5);
\path ($(4)!.5!(5)!3 cm!90:(5)$) coordinate (6);
\path (6) ++(3,0) coordinate (7);
%%Place nodes at each point using the foreach construct
\node[draw,circle,shading=axis,top color=\color, bottom color=\color!black,shading angle=45] (n\i) at (\i) {$f_{\i}(e)$};
}
%%Place the remaining nodes separately
\node (nx1) at (x1) {$\mathbf{x_1}$};
\node (nx2) at (x2) {$\mathbf{x_2}$};
\node (ny)  at (7)  {$\mathbf{y}$};
%%Drawing the arrows
\path[normal arrow] (nx1) -- (n1);
\path[normal arrow] (nx1) -- (n3);
\path[normal arrow] (nx2) -- (n1);
\path[normal arrow] (nx2) -- (n3);
\path[normal arrow] (n1)  -- (n4);
\path[normal arrow] (n1)  -- (n5);
\path[normal arrow] (n2)  -- (n4);
\path[normal arrow] (n2)  -- (n5);
\path[normal arrow] (n3)  -- (n4);
\path[normal arrow] (n3)  -- (n5);
\path[normal arrow] (n4)  -- (n6);
\path[normal arrow] (n5)  -- (n6);
\path[normal arrow] (n6)  -- (ny);
%%Drawing the cyan arrows including the labels
\path[normal arrow,Cyan] (nx1) -- node[above=.5em,Cyan] {$\mathbf{w_{(x1)2}}$} (n2);
\path[normal arrow,Cyan] (nx2) -- node[below=.5em,Cyan] {$\mathbf{w_{(x2)2}}$} (n2);
\end{tikzpicture}
\end{document}


The problems with my solution is that it has unnecessary labels, as well as a node at the very end, which is unnecessary. I can't find a way to position the nodes cannot be positioned in a circular pattern in my solution.

-

## With semic automatic placement of nodes

Loops and polar coordinates:

\documentclass[border=1cm]{standalone}

\usepackage{tikz}
\usepackage{xcolor}

\begin{document}
\begin{tikzpicture}
\foreach \x /\alph/\name in {0/a/one, 60/b/two, 120/c/three, 180/d/four, 240/e/five, 300/f/six}{
\node[circle, fill=green,minimum width=15mm,draw,shading=axis,top color=green, bottom color=green!50!black] (\alph) at (\x:3cm) {\name}; }

\foreach \alpha in {a,b,c,d,e,f}%
{%
\foreach \alphb in {a,b,c,d,e}%
{%
\draw (\alpha) -- (\alphb);%
}}

\end{tikzpicture}

\end{document}


# Complete manual placement

Improvement: using the backgound library. This makes it possible to draw the nodes first and then the lines, without seeing the lines crossing the nodes.

\documentclass[border=1cm]{standalone}

\usepackage{tikz}
\usetikzlibrary{backgrounds}

\usepackage{xcolor}

\begin{document}
\begin{tikzpicture}[every node/.style={circle, fill=green,minimum width=15mm,draw,shading=axis,top color=green, bottom color=green!50!black}]

\node (a) at (0,0){ one};
\node (b) at (0,2) {two};
\node (c) at (4,2) {three};
\node (d) at (4,0) {four};
\node (e) at (8,-2) {five};
\node (f) at (8,3){six};

\begin{scope}[on background layer]
\foreach \alpha in {a,b,c,d,e,f}%
{%
\foreach \alphb in {a,b,c,d,e}%
{%
\draw (\alpha) -- (\alphb);%
}}
\end{scope}
\end{tikzpicture}

\end{document}


## tkz-berge solution

I'm not quite a familiar with tkz-berge but this should do:

\documentclass[border=5cm]{standalone}

\usepackage{tikz}
\usepackage{xcolor}
\usepackage{tkz-berge}

\begin{document}

\begin{tikzpicture}
\renewcommand*{\VertexBallColor}{green!80!black}
\grComplete[RA=5]{6}
\end{tikzpicture}

\begin{tikzpicture}
\renewcommand*{\VertexBallColor}{green!80!black}

\grPath[Math,prefix=p,RA=2,RS=0]{2}
\grPath[Math,prefix=q,RA=2,RS=3]{2}

\begin{scope}[xshift=4cm, yshift=-1cm]
\grPath[Math,prefix=r,RA=2,RS=0]{1}
\end{scope}

\begin{scope}[xshift=4cm, yshift=4cm]
\grPath[Math,prefix=s,RA=2,RS=0]{1}
\end{scope}

\foreach \from in { 0,...,1}{
\EdgeFromOneToAll{p}{q}{\from}{2}
}
\EdgeFromOneToAll{r}{q}{0}{2}
\EdgeFromOneToAll{r}{p}{0}{2}

\EdgeFromOneToAll{s}{q}{0}{2}
\EdgeFromOneToAll{s}{p}{0}{2}
\EdgeFromOneToAll{s}{r}{0}{1}

\end{tikzpicture}

\end{document}


The first plot is quite easy with the package but trying manual placemant is rather typing intense. This package is not made for such special stuff, since there is no build in command for having one path of vertices but with complete manual placement. (At least as far as i know.). So i'd like to present a proper automatic (One) and more a hackish possibility (Two) which provides near to manual placement

-
So simple! Thank you –  alexy13 Dec 8 '12 at 17:10
How would I be able to position each node at an absolute position? (Instead of a circle). I believe I'd have to modify the \node[circle, fill=black,minimum width=0.1mm,draw] (\alph) at (\x:3cm) {}; } –  alexy13 Dec 8 '12 at 17:17
Like, I want to be able to place each node at any position on the document, not just limited to a circle –  alexy13 Dec 8 '12 at 17:22
like so? for any place in the document (or at least on the page) one should need the overlay functionality –  bloodworks Dec 8 '12 at 17:59
That's perfect! Thank you again. –  alexy13 Dec 8 '12 at 18:02