# GSoC 2015: Visualizing networks with Vispy

Written by Lucas on

So, let's revive this blog a little bit! I'm happy to announce that I've been accepted to the Google Summer of Code 2015! This time as student under the umbrella organisation of my favourite programming language, the Python Foundation!

I'll be working on Vispy, a relatively young scientific visualization library, which uses the GPU intensively to achieve high performance even when visualizing large datasets, or when you require real-time interactivity. Read on to see what I want to achieve this summer!

## The Project

This summer I want to add the possibility to visualize large networks or graphs with Vispy. Networks are used in all sorts of scientific fields, especially in bio-informatics: think of protein-protein interaction network, gene regulatory network, metabolic pathways, and a lots more. Some of these networks also have a underlying dynamic model in the form of a boolean, linear or Bayesian model.

### Example use case

- A certain protein interaction complex has been modelled as a graph where the edges represent an interaction between proteins.
- The dynamic behaviour has been modelled with a Bayesian model.
- Visualize the network with Vispy, see how a certain effect propagates through the network
- Add interactivity: when clicking on a node or edge, change its value and see how this propagates through the network.

### Project Components

**Curved lines and arrows**

Port bezier lines from GlumPy and implement several arrow heads.

**Graph visualization**

The main part of this project. The goal is to design and implement a nice API for visualizing networks. All sorts of networks must be supported: directed and non-directed networks, multiple edges per node, etc. Requirements

- Visuals, colors and other appearance properties should be very configurable
- Visuals for nodes
- Visuals for edges
- Colors
- Node/edge annotations

- Support for different automatic layouts
- Force directed
- Radial
- Circular
- Hierarchical
- Orthogonal
- yFiles Organic
- ...

- Support for dynamic networks
- Boolean
- Linear
- Bayesian
- With interactivity, for example clicking on a node changes a certain value, which could have effects in the rest of the network.

**Higher dimensional data viewer**

In a lot of scientific fields you often have higher dimensional data which is not easily visualized in 2D or 3D. Still, it's often very convenient to visualize this data. So this part of the project aims to provide some tools to help with this task.

Scenario:

- The user has a dataset which is a matrix of size (N, D). Here N is the number of data points, and D is the dimension (which is supposed to be high).
- The user supplies the vectors of size (3, D) which spans a 3D subspace within R^D
- The user applies some dimension reduction techniques on his data.
- Vispy calculates the projections of this data on the given subspace
- Visualize it!

For this project I will mainly focus on calculating the linear projections on the GPU.

## Follow the project

Github: http://github.com/sh4wn/vispy

Twitter: http://twitter.com/lucasvandijk