Source code for mediaviz.viz_parser

from xml.etree.cElementTree import ElementTree
import matplotlib.colors as colors


def _convert_rgb_to_hex(color_code):
    """Converts dict containing rgb color code to hex color code. 

    Parameters
    ----------
    color_code : dict
        A dictionary containing rgb color code. Example : {'r':0,'g':0,'b':0}
    
    Returns
    -------
    str
        hex code of form '#XXXXXX' 

    """
    rgb_color_code = color_code['r'], color_code['g'], color_code['b']
    hex_code = colors.rgb2hex([(1.0*float(x))/255 for x in rgb_color_code])
    return hex_code


[docs]def parse_colors(path, hex=False): """ Parses the color attribute from .gexf file viz tag and returns the dict with the node colors. Default nx.read_gexf() does not read the attributes from the visualization namespace of .gexf files so this function is used to read the color codes. To learn more see : https://gephi.org/gexf/format/viz.html Parameters ---------- path : str File or filename of the graph in .gexf format. hex : bool whether to return the color codes in hex format. if False rgb color codes are returned. Returns ------- dict Returns dict containing the color codes. Example : {'1':'#FFFFFF'} or {'1':{'r':0,'g':0,'b':0}} """ tree = ElementTree(file=path) root = tree.getroot() nodes = [child for child in root.iter() if "nodes" in child.tag][0] color_codes = {} for node in nodes: id = node.attrib['id'] color_code = [ child for child in node if "color" in child.tag][0].attrib if hex: hex_code = _convert_rgb_to_hex(color_code) color_codes[id] = hex_code else: color_codes[id] = color_code return color_codes
[docs]def parse_size(path): """Parses the size attribute from .gexf file viz tag and returns the dict with the node sizes. Default nx.read_gexf() does not read attributes from the visualization namespace of .gexf files so we use this function to get the node sizes. To learn more see : https://gephi.org/gexf/format/viz.html Parameters ---------- path : str File or filename of the graph in .gexf format. Returns ------- dict Returns dict containing the node sizes. Example : {'1':52.0} """ tree = ElementTree(file=path) root = tree.getroot() nodes = [child for child in root.iter() if "nodes" in child.tag][0] sizes = {} for node in nodes: id = node.attrib['id'] size = [child for child in node if "size" in child.tag][0].attrib sizes[id] = float(size['value']) return sizes
[docs]def parse_position(path): """Parses the position attribute from .gexf file viz tag and returns the dict with the node sizes. Default nx.read_gexf() does not read attributes from the visualization namespace of .gexf files so we use this function to get the node positions, possibly after using layout algorithms in Gephi. To learn more see : https://gephi.org/gexf/format/viz.html Parameters ---------- path : str File or filename of the graph in .gexf format. Returns ------- dict Returns dict containing the node positions. Example : {'1':(2.0,3.0)} """ tree = ElementTree(file=path) root = tree.getroot() nodes = [child for child in root.iter() if "nodes" in child.tag][0] positions = {} for node in nodes: id = node.attrib['id'] position = [ child for child in node if "position" in child.tag][0].attrib positions[id] = (float(position['x']), float(position['y'])) return positions