import uuid from ipywidgets import Output, HBox import meshplot as mp rendertype = 'JUPYTER' import numpy as np import networkx as nx class Subplot(): def __init__(self, data, view, s): if data == None: self.rows = [] self.hboxes = [] else: self.rows = data.rows if s[0] != 1 or s[1] != 1: if data == None: # Intialize subplot array cnt = 0 for r in range(s[0]): row = [] for c in range(s[1]): row.append(Output()) cnt += 1 self.rows.append(row) for r in self.rows: hbox = HBox(r) if rendertype == "JUPYTER": display(hbox) self.hboxes.append(hbox) out = self.rows[int(s[2]/s[1])][s[2]%s[1]] if rendertype == "JUPYTER": with out: display(view._renderer) self.rows[int(s[2]/s[1])][s[2]%s[1]] = view def save(self, filename=""): if filename == "": uid = str(uuid.uuid4()) + ".html" else: filename = filename.replace(".html", "") uid = filename + '.html' s = "" imports = True for r in self.rows: for v in r: s1 = v.to_html(imports=imports, html_frame=False) s = s + s1 imports = False s = "\n\n" + s + "\n\n" with open(uid, "w") as f: f.write(s) print("Plot saved to file %s."%uid) def to_html(self, imports=True, html_frame=True): s = "" for r in self.rows: for v in r: s1 = v.to_html(imports=imports, html_frame=html_frame) s = s + s1 imports = False return s def subplot(f, c = 'red', uv=None, n=None, shading={}, s=[1, 1, 0], data=None, **kwargs): shading={'point_size':0.05, "point_color": c, "line_color": c, "width":400, "height":400} view = mp.Viewer(settings = {"width": 500, "height": 500, "antialias": True, "scale": 1.5, "background": "#ffffff", "fov": 30}) #obj = view.add_points(np.array([ f.nodes[v]['posicion'] for v in f.nodes]), shading=shading) obj = view.add_points( np.array([f.nodes[v]['posicion'] for v in f.nodes if f.nodes[v]['root'] == True]), shading={'point_size':.02, 'point_color':'red'}) if len(np.array([ f.nodes[v]['posicion'] for v in f.nodes if f.nodes[v]['root'] == False])) != 0: obj = view.add_points( np.array([f.nodes[v]['posicion'] for v in f.nodes if f.nodes[v]['root'] == False]), shading={'point_size':.02, 'point_color':'black'}) for arista in f.edges: obj = view.add_lines( f.nodes[arista[0]]['posicion'], f.nodes[arista[1]]['posicion'], shading = shading) subplot = Subplot(data, view, s) return subplot def plotTree( root, dec ): graph = nx.Graph() root.toGraph( graph, 0, dec, 0) edges=nx.get_edge_attributes(graph,'procesada') p = mp.plot( np.array([ graph.nodes[v]['posicion'] for v in graph.nodes if graph.nodes[v]['root'] == True]), shading={'point_size':0.05, 'point_color':'red'}, return_plot=True) if len(np.array([ graph.nodes[v]['posicion'] for v in graph.nodes if graph.nodes[v]['root'] == False])) != 0: p.add_points( np.array([graph.nodes[v]['posicion'] for v in graph.nodes if graph.nodes[v]['root'] == False]), shading={'point_size':.05, 'point_color':'black'}) for arista in graph.edges: p.add_lines( graph.nodes[arista[0]]['posicion'], graph.nodes[arista[1]]['posicion']) return def sTree( root, dec, s, c, d=None): "plot trees next to each other" graph = nx.Graph() root.toGraph( graph, 0, dec, 0) if d: subplot(graph, c=c, s=s, data = d) else: d = subplot(graph, c=c, s=s) return d