# How to Use Graphviz in Jupyter Notebook

Learn how to use Graphviz in Jupyter Notebook for visualizing graphs and networks. Graphviz is a powerful tool for visualizing graphs and networks. It can be used to create complex diagrams and visualizations in a variety of contexts, including data science and machine learning. In this tutorial, we will explore how to use Graphviz in Jupyter Notebook, a popular tool for data analysis and visualization. Don’t forget you can get free Jupyter notebooks online at Saturn Cloud.

Before we get started, it is important to note that Graphviz is not included in the standard Anaconda distribution, which is a popular distribution of Python and related packages for data science. Therefore, we will need to install Graphviz separately before we can use it in Jupyter Notebook.

## Installation

To install Graphviz, we can use the following command in the terminal or command prompt:

``````pip install graphviz
``````

This will install the latest version of Graphviz, along with any necessary dependencies. Once Graphviz is installed, we can import it into our Jupyter Notebook using the following code:

``````import graphviz
``````

## Creating a Graph

Now that we have Graphviz installed and imported, we can start creating graphs. Graphviz uses a simple syntax for describing graphs, which consists of nodes and edges. Nodes represent entities in the graph, while edges represent relationships between those entities.

Here is an example of a simple graph in Graphviz syntax:

``````digraph {
A -> B;
A -> C;
B -> D;
C -> D;
}
``````

This graph consists of four nodes (A, B, C, and D) and four edges connecting those nodes. To create this graph in Graphviz, we can use the following code:

``````dot_data = '''
digraph {
A -> B;
A -> C;
B -> D;
C -> D;
}
'''
graph = graphviz.Source(dot_data)
graph
``````

This code creates a Graphviz object called `graph` that represents the graph described in the `dot_data` string. We can display this graph in our Jupyter Notebook by simply calling the `graph` object.

## Customizing the Graph

Graphviz provides a number of options for customizing the appearance of graphs, including node shape, color, and size, as well as edge style and label placement. Here are a few examples of how we can customize our graph:

``````dot_data = '''
digraph {
node [shape=rectangle, style=filled, color=lightblue];
edge [style=dashed];
A -> B [label="1"];
A -> C [label="2"];
B -> D [label="3"];
C -> D [label="4"];
}
'''
graph = graphviz.Source(dot_data)
graph
``````

In this example, we have added a few options to our graph definition. We have set the shape of all nodes to `rectangle`, filled them with a light blue color, and set the edge style to `dashed`. We have also added labels to each edge, which will be displayed on the graph.

Here are a few more examples of how we can customize our graph:

``````dot_data = '''
digraph {
node [shape=circle, style=filled, color=lightblue, width=0.5, height=0.5];
edge [style=bold, color=red];
A -> B [label="1", taillabel="start", headlabel="end"];
A -> C [label="2", taillabel="start", headlabel="end"];
B -> D [label="3", taillabel="start", headlabel="end"];
C -> D [label="4", taillabel="start", headlabel="end"];
}
'''
graph = graphviz.Source(dot_data)
graph
``````

In this example, we have set the shape of all nodes to `circle`, reduced their size to `0.5` units, and set the edge style to `bold` and color to `red`. We have also added labels to each edge, as well as labels at the start and end of each edge.

## Conclusion

In this tutorial, we have explored how to use Graphviz in Jupyter Notebook to create and customize graphs. Graphviz is a powerful tool for visualizing complex networks and relationships, and can be used in a variety of contexts, including data science and machine learning. With the simple syntax and powerful customization options provided by Graphviz, we can create compelling visualizations that help us better understand complex data sets and models.