File size: 2,432 Bytes
6fbafaf
a93d680
6fbafaf
a93d680
e1931fe
 
 
 
 
6fbafaf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7414449
6fbafaf
 
 
 
 
 
 
 
 
 
6a6be82
 
e3e5d9c
 
 
 
 
 
 
 
 
 
6a6be82
 
e1931fe
6a6be82
9cfb470
 
e3e5d9c
e1931fe
83ef126
 
6fbafaf
 
71318fc
6fbafaf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83ef126
6fbafaf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import gradio as gr
import igraph as ig
import plotly.graph_objects as go

PLOTLY_TREE = None

def get_plotly_tree():
    return PLOTLY_TREE

def create_plotly_tree():
    # Create an igraph tree
    g = ig.Graph.Tree(7, 2)  # Example tree
    lay = g.layout('rt')  # Reingold-Tilford layout

    # Plotly setup
    edge_x = []
    edge_y = []
    for edge in g.get_edgelist():
        x0, y0 = lay[edge[0]]
        x1, y1 = lay[edge[1]]
        edge_x.extend([x0, x1, None])
        edge_y.extend([y0, y1, None])

    edge_trace = go.Scatter(
        x=edge_x, y=edge_y,
        line=dict(width=0.5, color='#888'),
        hoverinfo='none',
        mode='lines')

    node_x = [lay[k][0] for k in range(len(lay))]
    node_y = [lay[k][1] for k in range(len(lay))]

    node_trace = go.Scatter(
        x=node_x, y=node_y,
        mode='markers',
        hoverinfo='text',
        marker=dict(showscale=False, size=10, color='#850', line_width=2))

    fig = go.FigureWidget(data=[edge_trace, node_trace],
                    layout=go.Layout(
                        showlegend=False,
                        hovermode='closest',
                        margin=dict(b=0, l=0, t=0, r=0),
                        xaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
                        yaxis=dict(showgrid=False, zeroline=False, showticklabels=False))
                    )

    return fig

def print_on_click(trace, points, selector):
    print('Clicked')

def update_point(trace, points, selector):
    c = list(scatter.marker.color)
    s = list(scatter.marker.size)
    for i in points.point_inds:
        c[i] = '#bae2be'
        s[i] = 20
        with f.batch_update():
            scatter.marker.color = c
            scatter.marker.size = s
    

PLOTLY_TREE = create_plotly_tree()
node_trace = PLOTLY_TREE.data[1]
print('node_trace', node_trace)
print(node_trace.on_click)
node_trace.on_click(update_point)

print('PLOTLY_TREE', PLOTLY_TREE)

def setup_interface():
    iface = gr.Interface(
        fn=get_plotly_tree,
        inputs=[],
        outputs=gr.Plot(),
        title="Interactive Tree Visualization"
    )
    return iface

with gr.Blocks() as demo:
    with gr.Column():
        tree_interface = setup_interface()
        textbox = gr.Textbox()

# Launch the interface
if __name__ == "__main__":
    # iface = setup_interface()
    # iface.launch()
    print('before launch')
    demo.launch()