# How to draw a graph in tikz by just giving the vertex set and edge set?

I am stuck at the following:

I need to draw a graph G with vertex set V and edge set E. The set of vertices of G is 1,2,3,4,5,....35,36. The following gives the adjacency criterion:

1 is adjacent to the vertices  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

2 is adjacent to the vertices  1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35

3 is adjacent to the vertices  1 2 4 5 7 8 10 11 13 14 16 17 19 20 22 23 25 26 28 29 31 32 34 35

4 is adjacent to the vertices  1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35

5 is adjacent to the vertices  1 2 3 4 6 7 8 9 11 12 13 14 16 17 18 19 21 22 23 24 26 27 28 29 31 32 33
34 36

6 is adjacent to the vertices  1 5 7 11 13 17 19 23 25 29 31 35

7 is adjacent to the vertices  1 2 3 4 5 6 8 9 10 11 12 13 15 16 17 18 19 20 22 23 24 25 26 27 29 30 31 32 33 34 36

8 is adjacent to the vertices  1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35

9 is adjacent to the vertices  1 2 4 5 7 8 10 11 13 14 16 17 19 20 22 23 25 26 28 29 31 32 34 35

10 is adjacent to the vertices  1 3 7 9 11 13 17 19 21 23 27 29 31 33

11 is adjacent to the vertices  1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 34 35 36

12 is adjacent to the vertices  1 5 7 11 13 17 19 23 25 29 31 35

13 is adjacent to the vertices  1 2 3 4 5 6 7 8 9 10 11 12 14 15 16 17 18 19 20 21 22 23 24 25 27 28 29 30 31 32 33 34 35 36

14 is adjacent to the vertices  1 3 5 9 11 13 15 17 19 23 25 27 29 31 33

15 is adjacent to the vertices  1 2 4 7 8 11 13 14 16 17 19 22 23 26 28 29 31 32 34

16 is adjacent to the vertices  1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35

17 is adjacent to the vertices  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36

18 is adjacent to the vertices  1 5 7 11 13 17 19 23 25 29 31 35

19 is adjacent to the vertices  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

20 is adjacent to the vertices  1 3 7 9 11 13 17 19 21 23 27 29 31 33

21 is adjacent to the vertices  1 2 4 5 8 10 11 13 16 17 19 20 22 23 25 26 29 31 32 34

22 is adjacent to the vertices  1 3 5 7 9 13 15 17 19 21 23 25 27 29 31 35

23 is adjacent to the vertices  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 24 25 26 27 28 29 30 31 32 33 34 35 36

24 is adjacent to the vertices  1 5 7 11 13 17 19 23 25 29 31 35

25 is adjacent to the vertices  1 2 3 4 6 7 8 9 11 12 13 14 16 17 18 19 21 22 23 24 26 27 28 29 31 32 33 34 36

26 is adjacent to the vertices  1 3 5 7 9 11 15 17 19 21 23 25 27 29 31 33 35

27 is adjacent to the vertices  1 2 4 5 7 8 10 11 13 14 16 17 19 20 22 23 25 26 28 29 31 32 34 35

28 is adjacent to the vertices  1 3 5 9 11 13 15 17 19 23 25 27 29 31 33

29 is adjacent to the vertices  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 30 31 32 33 34 35 36

30 is adjacent to the vertices  1 7 11 13 17 19 23 29 31

31 is adjacent to the vertices  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 33 34 35 36

32 is adjacent to the vertices  1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35

33 is adjacent to the vertices  1 2 4 5 7 8 10 13 14 16 17 19 20 23 25 26 28 29 31 32 34 35

34 is adjacent to the vertices  1 3 5 7 9 11 13 15 19 21 23 25 27 29 31 33 35

35 is adjacent to the vertices  1 2 3 4 6 8 9 11 12 13 16 17 18 19 22 23 24 26 27 29 31 32 33 34 36

36 is adjacent to the vertices  1 5 7 11 13 17 19 23 25 29 31 35


I know how to draw the graph by manually specifying the co-ordinates. It can be done using \node and \draw Is it possible to draw the graph without manually entering the co-ordinates? Is it possible to make tikz automatically choose the co-ordinates and draw the graph?is it possible to use some loop where I just specify the vertices and edges and the graph gets drawn?

Since its a big graph its very difficult to manually specify the coordinates.

Please help someone.

• TikZ does have features for automatic positioning of graphs, though I have no idea how to apply your criteria. See chapter 19 Specifying graphs, and Part IV Graph drawing of the manual. Commented Jul 4, 2020 at 9:56
• @TorbjørnT.; is it possible to draw a graph in tikz just by specifying the vertices and edges? Commented Jul 4, 2020 at 10:45
• I do believe that is what is described in the manual, yes. But there are various algorithms for the positioning. While waiting for answers, I suggest looking at the manual, or searching this site for examples. Commented Jul 4, 2020 at 10:49
• How do I get the manual? Do you have the link? can you share it pleass Commented Jul 4, 2020 at 11:10
• Texdoc.net(texdoc.net/texmf-dist/doc/generic/pgf/pgfmanual.pdf), or go to ctan.org. You may also already have it on your computer, as part of the TeX distribution you're using. To find it, open a terminal/command prompt, type texdoc pgf and hit enter. Commented Jul 4, 2020 at 11:14

## 1 Answer

As mentioned by Torbjørn T. in the comments, TikZ has a graphdrawing library that can be used to automatically calculate the graph layout.

With \usetikzlibrary{graphs,graphdrawing} you enable the graph drawing library. Then you can select several graph drawing libraries with \usegdlibrary.

A graph is drawn by giving vertices and their edges in \graph. There are several ways to do that, but a simple method (especially if the graph data is computer generated) is to give vertices without connecting edges as v and list all neighbours of a vertex that has neighbours in v--u_1, v--u_2, ..., v--u_n form.

You have to select a layout from one of the graph drawing libraries you loaded. (A list of libraries can be found in the PGF manual, Part IV).

A self-loop can be drawn with v--[loop]v, in my tests v--v was not enough (see Self-loop with tikz-graphdrawing library).

You will need to compile the document with LuaLaTeX, since the graphdrawing library relies on Lua components. (The base graph was generated by the igraph R package for a recent seminar talk of mine, I just added a new node 10 and the self-loop at 1 for this example.)

% !TEX TS-program = lualatex
\documentclass{article}

\usepackage{fontspec}

\usepackage{tikz}
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{circular,force,layered,routing}

\tikzset{
graphs/simpleer/.style={
nodes={draw,circle, blue, left color=blue!20, text=black, inner sep=1pt},
node distance=2.5cm, nodes={minimum size=2em}
},
every loop/.style={},
}

\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}
\graph[simpleer, simple necklace layout]{
1--3, 1--[loop]1,
2--6, 5--6,
3--7, 4--7, 5--7, 6--7,
1--8, 6--8, 7--8,
5--9, 6--9,
10;
};
\end{tikzpicture}
\caption{Erdős--Rényi  graph for~$$n=9$$, $$p_{9}=0.3$$
plus one loop at~$$1$$
and an unconnected vertex~$$10$$
drawn in \texttt{simple necklace layout}}
\end{figure}

\begin{figure}
\centering
\begin{tikzpicture}
\graph[simpleer, layered layout]{
1--3, 1--[loop]1,
2--6, 5--6,
3--7, 4--7, 5--7, 6--7,
1--8, 6--8, 7--8,
5--9, 6--9,
10;
};
\end{tikzpicture}
\caption{Erdős--Rényi  graph for~$$n=9$$, $$p_{9}=0.3$$
plus one loop at~$$1$$
and an unconnected vertex~$$10$$
drawn in \texttt{layered layout}}
\end{figure}

\begin{figure}
\centering
\begin{tikzpicture}
\graph[simpleer, spring layout]{
1--3, 1--[loop]1,
2--6, 5--6,
3--7, 4--7, 5--7, 6--7,
1--8, 6--8, 7--8,
5--9, 6--9,
10;
};
\end{tikzpicture}
\caption{Erdős--Rényi  graph for~$$n=9$$, $$p_{9}=0.3$$
plus one loop at~$$1$$
and an unconnected vertex~$$10$$
drawn in \texttt{spring layout}}
\end{figure}
\end{document}


Here's how you could input your graph (it looks a bit too crowded to be drawn nicely to me, but that may be a matter of taste).

If you have lists of neighbours for each edge, say v -- {u_1,u_2,...,u_n},, again loops have to be listed separately.

% !TEX TS-program = lualatex
\documentclass{article}

\usepackage{fontspec}

\usepackage{tikz}
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{circular}

\tikzset{
graphs/simpleer/.style={
nodes={draw,circle, blue, left color=blue!20, text=black, inner sep=1pt},
nodes={minimum size=2em}
},
every loop/.style={},
}

\begin{document}
\begin{tikzpicture}
\graph[simpleer, simple necklace layout]{
1 -- {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36},
2 -- {1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35},
3 -- {1,2,4,5,7,8,10,11,13,14,16,17,19,20,22,23,25,26,28,29,31,32,34,35},
4 -- {1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35},
5 -- {1,2,3,4,6,7,8,9,11,12,13,14,16,17,18,19,21,22,23,24,26,27,28,29,31,32,33,34,36},
6 -- {1,5,7,11,13,17,19,23,25,29,31,35},
7 -- {1,2,3,4,5,6,8,9,10,11,12,13,15,16,17,18,19,20,22,23,24,25,26,27,29,30,31,32,33,34,36},
8 -- {1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35},
9 -- {1,2,4,5,7,8,10,11,13,14,16,17,19,20,22,23,25,26,28,29,31,32,34,35},
10 -- {1,3,7,9,11,13,17,19,21,23,27,29,31,33},
11 -- {1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,34,35,36},
12 -- {1,5,7,11,13,17,19,23,25,29,31,35},
13 -- {1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36},
14 -- {1,3,5,9,11,13,15,17,19,23,25,27,29,31,33},
15 -- {1,2,4,7,8,11,13,14,16,17,19,22,23,26,28,29,31,32,34},
16 -- {1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35},
17 -- {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,35,36},
18 -- {1,5,7,11,13,17,19,23,25,29,31,35},
19 -- {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36},
20 -- {1,3,7,9,11,13,17,19,21,23,27,29,31,33},
21 -- {1,2,4,5,8,10,11,13,16,17,19,20,22,23,25,26,29,31,32,34},
22 -- {1,3,5,7,9,13,15,17,19,21,23,25,27,29,31,35},
23 -- {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,24,25,26,27,28,29,30,31,32,33,34,35,36},
24 -- {1,5,7,11,13,17,19,23,25,29,31,35},
25 -- {1,2,3,4,6,7,8,9,11,12,13,14,16,17,18,19,21,22,23,24,26,27,28,29,31,32,33,34,36},
26 -- {1,3,5,7,9,11,15,17,19,21,23,25,27,29,31,33,35},
27 -- {1,2,4,5,7,8,10,11,13,14,16,17,19,20,22,23,25,26,28,29,31,32,34,35},
28 -- {1,3,5,9,11,13,15,17,19,23,25,27,29,31,33},
29 -- {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,31,32,33,34,35,36},
30 -- {1,7,11,13,17,19,23,29,31},
31 -- {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36},
32 -- {1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35},
33 -- {1,2,4,5,7,8,10,13,14,16,17,19,20,23,25,26,28,29,31,32,34,35},
34 -- {1,3,5,7,9,11,13,15,19,21,23,25,27,29,31,33,35},
35 -- {1,2,3,4,6,8,9,11,12,13,16,17,18,19,22,23,24,26,27,29,31,32,33,34,36},
36 -- {1,5,7,11,13,17,19,23,25,29,31,35},
% loops are given separately
1--[loop]1,
};
\end{tikzpicture}
\end{document}


• Thanks a lot for the answer but how to compile in LuaLatex? I never used it, is it anything that needs to be installed separately Commented Jul 4, 2020 at 12:05
• @Math_Freak Most editors will have a button to run LuaLaTeX. If you normally compile from the command line, just run lualatex <document> instead of pdflatex <document>. How do you compile your document at the moment? What editor do you use? Note that some changes may be needed if you switch from (pdf)LaTeX to LuaLaTeX, see tex.stackexchange.com/q/28642/35864 (in many cases it is enough to ensure the document is UTF-8 encoded, to remove inputenc and fontenc from the preamble and change the font setup to fontspec (which allows you to load system fonts)). Commented Jul 4, 2020 at 12:07
• I use TexStudio and MikTex. Where will I write lualatex document? In TexStudio I just click the double play button(green symbol with two arrows) and it gets complied Commented Jul 4, 2020 at 12:08
• @Math_Freak Tools > Commands > LuaLaTeX runs LuaLaTeX on the document. Then you can inspect it by clicking on "View"/F7. (It may also be enough to add a magic command to the top of the document, see the edit.) Commented Jul 4, 2020 at 12:11
• Is it possible to draw the graph without the necklace ?? Commented Jul 4, 2020 at 12:12