Source code for goenrich.export
import networkx as nx
import numpy as np
import pandas as pd
import goenrich
[docs]def to_frame(nodes, **kwargs):
""" export node attributes and key-values pairs to pd.DataFrame
>>> to_frame(nodes, term = terms, pvalues = ps, ...)
:param nodes: list of dictionaries with node attributes
:param **kwargs: additional columns
:returns: a pd.DataFrame
"""
names, namespaces = zip(*[(n['name'], n['namespace']) for n in nodes])
kwargs.update({'name' : names, 'namespace' : namespaces})
return pd.DataFrame(kwargs)
[docs]def to_graphviz(G, gvfile, graph_label='', **kwargs):
""" export graph of signifcant findings to dot file.
A png can be generated from the commandline using graphviz
>>> import subprocess
>>> subprocess.call(['dot', '-Tpng', 'filpath.dot', '>', 'filepath.png'])
:param G: the graph to be exported
:param gvfile: file or filepath
:param graph_label: For empty label pass graph_label=''.
"""
for n in G:
node = G.node[n]
attr = {}
attr['shape'] = 'record'
if not np.isnan(node.get('q', float('NaN'))):
attr['color'] = 'red' if node['significant'] else 'black'
attr['label'] = "{name}\\n{x} / {n} genes\\nq = {q:E}".format(name=node['name'],
q=node['q'], x=node['x'], n=node['n'])
else:
attr['color'] = 'black'
attr['label'] = """{name}""".format(name=node['name'])
G.node[n].clear()
G.node[n].update(attr)
A = nx.drawing.nx_agraph.to_agraph(G)
A.graph_attr['label'] = graph_label
A.graph_attr['labelloc'] = 't'
if hasattr(gvfile, 'write'):
A.write(gvfile)
else:
with open(gvfile, 'w') as f:
A.write(f)