Git Product home page Git Product logo

tahsin-mayeesha / mediaviz Goto Github PK

View Code? Open in Web Editor NEW
15.0 3.0 8.0 62.26 MB

Force Based Network Visualization Library With Automated Scaling To Prevent Node Overlap, Label Adjustment & Easy Community Visualization Created During Google Summer Of Code 2018 With Berkman Klein Center of Internet And Society Research Lab(Harvard)

Home Page: https://summerofcode.withgoogle.com/projects/#6265196406898688

License: MIT License

Python 100.00%
networkx data-visualization network-visualization force-layout force-directed-graphs

mediaviz's Introduction

Mediaviz

Mediaviz is a network visualization library created for my project Automating Force Based Layout Scaling And Network Visualization For Media Source Networks From MediaCloud Topic Graphs done with Berkman Klein Center of Internet And Society at Harvard University while participating at Google Summer Of Code 2018 under the guidance of mentor Hal Roberts.

Mediacloud is an open source, open data platform for researchers that provides data and statistics for quantitative analysis. Mediaviz has been originally developed to automate the network visualization of the media source networks for different topics such as network neutrality, ebola and more.

However, beyond the mediacloud usage, Mediaviz is also a general purpose network visualization library. It provides functionalities for force based layout such as force atlas 2, automatic scaling to prevent node overlap, Gephi like features for network filtering, coloring, node resizing, prevention of label overlap and community visualization.

Mediaviz uses force atlas 2 layout as default and scales the layout automatically for graphs with 100-1000 nodes that has a power law linking structure. Having sensible defaults, Mediaviz can be used for general graph visualization as well as publishable graphs with many customization parameters including using the drawing function with any other network layout function in networkx or beyond.

Examples and demo visualizations are provided in the usage section.

Documentation

Complete Documentation is available at https://mediaviz.readthedocs.io/en/latest/

Installation

To install the package from pip :

pip install mediaviz

To build from source , download the repository and go to the Mediaviz top level directory. Then use

python setup.py install 

or

pip install .

Dependencies

Blog Posts

Usage

Draw a Network with Force Atlas 2 Layout With Default Parameters

import networkx as nx
from mediaviz.draw import draw_forceatlas2_network

path= 'graphname.gexf'
G = nx.erdos_renyi_graph(200,0.7)

draw_forceatlas2_network(G,node_color='purple', node_size=10, edge_color='gray',filename="random.png")

Drawing Network with Force Atlas 2 Layout with customization

Here we parse color codes from .gexf visual attributes.

import networkx as nx
from mediaviz.draw import draw_forceatlas2_network
from mediaviz.viz_parser import parse_colors, parse_size

# 1000 node graph from mediacloud on network neutrality topic
path = "network_neutrality.gexf" 
G = nx.read_gexf(path)
node_colors = list(parse_colors(path,hex=True).values())
draw_forceatlas2_network(G,
     num_labels = 30, # num_labels indicates to only label top 30 largest nodes by node_size
     fa2l_scaling_ratio=40,fa2l_iterations=100, # parameters for the force atlas 2 layout
     node_color = node_colors, 
     with_labels=True, label_field="label",
     filter_by="inlink_count", top=200, # filter to get top 200 nodes sorted by inlink_count
     size_field = "inlink_count",min_size=0.1,max_size=200, # resize by inlink_count
     adjust_labels=True, # adjusts labels to prevent label overlap
     node_opacity=0.8, edge_opacity=0.01, 
     font_size=6, # size of label font_size 
     filename= "network_neutrality.png", title="network_neutrality",
     edge_color_by_source=True)

Drawing Network With Community Detection and Coloring By Community Partitions

import community
import networkx as nx
from mediaviz.community_utils import get_community_graph, get_community_colormap
from mediaviz.draw import draw_forceatlas2_network

G = nx.florentine_families_graph() 
# get the community partitions and set partition as an attribute for the nodes 
G, partitions = get_community_graph(G) 
# colormaps are automatically assigned for each partition as randomly genererated hex colors
colormap = get_community_colormap(partitions)
# use the draw function as usual with forceatlas2 layout as default
draw_forceatlas2_network(
        G,
        color_by="partition", colormap=colormap,
        node_size = 10,
        with_labels=True, 
        edge_color_by_source=True, node_opacity = 1, edge_opacity = 1,
        font_size=10, filename = "community.png",
        figsize=(10, 10));

Only Using Draw Function for Customized Visualization With Other Layout Algorithms

import networkx as nx
from mediaviz.draw import draw_forceatlas2_network
G = nx.karate_club_graph()
pos = nx.spring_layout(G)
draw_forceatlas2_network(G,
                         pos = pos,
                         node_size=10,
                         color_by="club",
                         colormap={"Officer":"r","Mr. Hi":"b"},
                         node_opacity=1,edge_opacity=1, filename="karate_club.png",
                         edge_color="lightgray")

Notes

Instead of the automatic layout, it's possible to scale the graph manually with the scale parameter in drawing function. Force Atlas 2 first initializes the points position randomly and then iterativly adjusts their location based on attraction-repulsion force, please check fa2l package for details on how the default layout is being calculated. Also, all graphs are different. To get the best results experimentation with node sizes may be required. The axis scales are scaled by matplotlib after drawing the circles for best performance. Also in network visualization the relative position of the nodes matter more than the axis co-ordinates to reveal network structure.

Contribution and Further Improvement

If you want to contribute please send a pull request with listing the changes you have made and the reasoning clearly stated. Integrating the drawing function with matplotlib better and trying out different heuristics for automated scaling would be a priority.

License

This project is licensed under the MIT License - see the License.txt file for details.

List Of Contributors

Tahsin Mayeesha, Hal Roberts(Mentor)

mediaviz's People

Contributors

hroberts avatar tahsin-mayeesha avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

mediaviz's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.