# visualize(Graph) -- visualizes a graph in a modern browser

## Synopsis

• Function: visualize
• Usage:
H = visualize G
• Inputs:
• G, an instance of the type Graph, a graph
• Optional inputs:
• Verbose => ..., default value false, an to view communication between Macaulay2 server and browser
• VisPath => ..., default value null, an option to define a path to save visualizations of Graphs
• VisTemplate => ..., default value ../../../../../../../Macaulay2/packages/Visualize/templates/visGraph/visGraph-template.html, an option defining the template path
• Warning => ..., default value true, an option to squelch warnings

## Description

Using JavaScript, this method creates an interactive visualization of a graph in a modern browser. While viewing the graph, the user has the ability to manipulate and run various tests. Once finished, the user can export the finished result back to the Macaulay2 session.

The workflow for this package is as follows. Once we have loaded the package, we first open a port with openPort for Macaulay2 to communicate with the browser. Once a port is established, define an object to visualize. In this example we could use the command openPort"8080" before or after we define the following graph.

 i1 : G = graph({{0,1},{0,3},{0,4},{1,3},{2,3}},Singletons => {5}) o1 = Graph{0 => {1, 3, 4}} 1 => {0, 3} 2 => {3} 3 => {0, 1, 2} 4 => {0} 5 => {} o1 : Graph

At this point we wish to visualize G. To do this simply execute H = visualize G and browser will open with interactive image. You can view this image in the link below.

Visualize Graphs example

Once finished with a session, you can keep visualizing. For example if you were to say H = visualize G, once you ended the session, the last graph on the screen would be assigned to H. After running various computations on this graph, you can then visualize it once more with the visualize method. You can keep using this method until the port is closed with closePort or Macaulay2 is restarted.

On the side of the browser will be several options to interact with the graph using the Graphs package. Below is a brief overview of the options.

• Force Variables: The 'charge' slider will force the vertices to repel or attract each other while the 'links' slider increases and decreases the length of the edges.

• Enable Editing: In the browser, you can edit the graph (add/delete vertices or edges) by clicking Enable Editing. For example, in order to remove the edges {0,1} and {1,3} click on 'Enable Editing' and select the edges and press delete on the keyboard. You may also add vertices and edges with the mouse/trackpad. When editing is enabled, you can move the vertices around by holding down the shift key.

• Hide Labels: Removes the labels from the vertices.

• Highlight Neighbors: Allows you to see the neighbors of a vertex when selected.

• Reset Nodes: When you move a vertex, it will pin it to the canvas. If you have pinned a node to the canvas, you can undo this process by reseting the nodes. Clicking this will reset all nodes.

• Turn off force: The force is what creates the charges on the nodes. Turning this off will make the vertices not repel each other.

• Generate TikZ code: Clicking this will generate the TikZ code for a black and white version of the graph that is being viewed. You will then have to copy this to the clipboard by clicking a new button. The TeX file will only need '\usepackage{tikz}' in the preamble. If you decide you want to modify the graph, feel free. All you need do in order to get a new TikZ code is click on 'Generate TikZ code' once more, and then click the button. This button will look the same, but it will be a new code.

• Boolean tests: Clicking this will pull up a submenu of boolean tests supported by the Graphs package. Clicking on these tests will send a request to Macaulay2 to calculate the answer for the current graph on the screen. Warning: If your graph is too large, clicking a menu item could take a very long time. In order to cancel the process you need to kill the session of Macaulay2 with 'Ctrl+c+c' in the instance of Macaulay2.

• Numerical invariants: Clicking this will pull up a submenu of numerical invariants supported by the Graphs package. Clicking on these will send a request to Macaulay2 to calculate the answer for the current graph on the screen. Warning: If your graph is too large, clicking a menu item could take a very long time. In order to cancel the process you need to kill the session of Macaulay2 with 'Ctrl+c+c' in the instance of Macaulay2.

• End session: When you are finished editing, you can end the session and send the current graph to Macaulay2. The output of visualize G is the graph on the screen when end session is clicked.

## Caveat

When the graph is exported back to Macaulay2 after ending the visualization session, all vertices are represented as strings. To recover the values of these labels (for example, if they have numeric values or represent ring variables), use the command value first toString G.