Skip to content

Commit

Permalink
paper revision
Browse files Browse the repository at this point in the history
  • Loading branch information
benmaier committed Apr 24, 2019
1 parent b572d7d commit f2a2b90
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 10 deletions.
13 changes: 12 additions & 1 deletion paper/paper.bib
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,15 @@ @online{developersurvey
title = {Stack Overflow Developer Survey},
year = {2019},
urldate = {2019-04-23}
}
}

@article{graphtool,
title = {The graph-tool python library},
url = {http://figshare.com/articles/graph_tool/1164194},
doi = {10.6084/m9.figshare.1164194},
urldate = {2014-09-10},
journal = {figshare},
author = {Peixoto, Tiago P.},
year = {2014},
keywords = {all, complex networks, graph, network, other}
}
18 changes: 9 additions & 9 deletions paper/paper.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,19 +28,19 @@ bibliography: paper.bib

# Summary

Network visualization is an effective way to illustrate properties of a complex system. It is an important tool for exploring and spotting patterns, and is used by researchers and practitioners across many fields and industries.
Currently, there exists a number of tools for visualizing networks. *networkx* [@networkx] is a popular Python package for network analysis which provides limited functionality for computing layouts and plotting networks statically. Layout computations are done in Python or using the php-based software *Graphviz* [@graphviz], which is slow. *Gephi* [@gephi] and *Cytoscape* [@cytoscape] are dedicated visualization and analysis software programs. They are both Java-based and run desktop clients with a GUI, where users save and load networks as seperate files. *Webweb* [@webweb] enables interactive visualization for Python and Matlab networks using the d3.js [@d3] force layout. It's main purpose is exploration of network features and exporting one-time visualizations as SVG or HTML.
Network visualization is an effective way to illustrate properties of a complex system. It is an important tool for exploring and finding patterns, and is used by researchers and practitioners across many fields and industries.
Currently, there exist a number of tools for visualizing networks. *Networkx* [@networkx] is a popular Python package for network analysis which provides limited functionality for computing layouts and plotting networks statically. Layout computations are done in Python or using the php-based software *Graphviz* [@graphviz], which is slow. Another Python package for network analysis and visualization is *graph-tool* [@graphtool], which relies on a high number of external C++-libraries for installation/compilation which can be overwhelming for beginners. Furthermore, its visualization functions are non-interactive, as well. *Gephi* [@gephi] and *Cytoscape* [@cytoscape] are dedicated interactive visualization and analysis software programs. They are both Java-based and run desktop clients with a GUI where users save and load networks as separate files. *Webweb* [@webweb] enables interactive visualization for Python and Matlab networks using the d3.js [@d3] force layout. Its main purpose, however, is exploration of network features and exporting one-time visualizations as SVG or HTML.

For many users, these tools offer the necessary functionality to visualize networks in most desired ways. However, since a growing population of network researchers and practitioners are relying on Python for doing network science [@developersurvey], it is increasingly pressing that a fast and intuitive Python tool for network visualization exists.
For many users, these tools offer the necessary functionality to visualize networks in most desired ways. However, since a growing population of network researchers and practitioners are relying on Python for doing network science [@developersurvey], it is increasingly pressing that a fast and intuitive Python tool for reproducible network visualization exists.

*Netwulf* is a light-weight Python library that provides an ultra simple API for interactively visualizing a network and returning the computed layout and style. It is build around the philosophy that network manipulation and preprocessing should be done programmatically, but that the efficient generation of a visually appealing network is best done interactively, without code. Therefore, it offers no analysis functionality and only few exploration features, but instead focuses almost entirely on fast and intuitive layout manipulation and node/link styling. Interaction with Netwulf typically works as follows:
*Netwulf* is a light-weight Python library that provides a simple API for interactively visualizing a network and returning the computed layout and style. It is build around the philosophy that network manipulation and preprocessing should be done programmatically, but that the efficient generation of a visually appealing network is best done interactively, without code. Therefore, it offers no analysis functionality and only few exploration features, but instead focuses almost entirely on fast and intuitive layout manipulation and node/link styling. Interaction with Netwulf typically works as follows:

1. Users have a network, `G`, in either dictionary or *networkx.Graph* format. They then launch a Netwulf visualization by doing `netwulf.visualize(G)`.
2. This opens a new browser window containing `G` as an interactive, manipulable, stylable network. Here the user can e.g. explore how different configurations of physics parameters like *node charge* and *gravity* influences the layout, they can change node-color, link alpha, etc. and even thresholds away weak or strong links. When the user has arrived at a layout they like, the can either:
1. Save the image directly from the interactive visualization to the desktop as a PNG file.
2. Post the style and computed node-positions back to Python in dictionary format. This allows for further manipulation. Moreover, using the function `netwulf.tools.draw_netwulf` the network can be redrawn with matplotlib [@matplotlib], which enables saving as any format.
1. Users have a network object, `G`, in either dictionary or *networkx.Graph* format. They then launch a Netwulf visualization by calling `netwulf.visualize(G)`.
2. The command opens a new browser window containing `G` as an interactive, manipulable, stylable network. Here, the user can for instance explore how different configurations of physics parameters like *node charge* and *gravity* influence the layout, they can change properties like node color and link opacity, and even threshold the network data for weak or strong links. When the user has finalized the layouting process, they may either:
1. Save the image directly from the interactive visualization as a PNG file.
2. Post the style and computed node positions back to Python in a dictionary format, which allows for further manipulation in the Python backend. Moreover, using the function `netwulf.draw_netwulf`, the network can be redrawn using the common Python drawing library matplotlib [@matplotlib], which further enables saving the visualization in any format.

The interactive visualization is implemented in JavaScript, relies on d3.js [@d3] for computing layouts, and uses canvas for rendering. This makes it, to our knowledge, the fastest tool for network visualization in Python.
The interactive visualization is implemented in JavaScript, relies on d3.js [@d3] for computing layouts, and uses the HTML5-object `canvas` for rendering. This makes it, to our knowledge, the most performant tool for interactive network visualization in Python to date.


# Figures
Expand Down

0 comments on commit f2a2b90

Please sign in to comment.