CoolFace
Apppublic

linpershey/process_mining

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
app.py107 linesDownload Raw Back to root
1import dash2from dash import dcc, html3from dash.dependencies import Input, Output4import plotly.graph_objects as go5import networkx as nx6 7# Create a directed graph8G = nx.DiGraph()9 10# Add nodes11G.add_nodes_from([1, 2, 3, 4, 5, 6, 7, 8, 9])12 13# Add directed edges14G.add_edges_from([(1, 2), (1, 3), (2, 4), (3, 5), (1, 6), (4,7), (4,8),(5,7), (5,8), (7,9), (8,9), (6,9), (6,6)])15 16# Initialize the Dash app17app = dash.Dash(__name__)18 19app.layout = html.Div([20    dcc.Dropdown(21        id='node-dropdown',22        options=[{'label': f'Node {i}', 'value': i} for i in G.nodes],23        value=None,24        placeholder="Select a node to filter"25    ),26    dcc.Graph(id='network-graph')27])28 29@app.callback(30    Output('network-graph', 'figure'),31    Input('node-dropdown', 'value')32)33def update_graph(selected_node):34    if selected_node is not None:35        nodes_to_filter = [selected_node]36    else:37        nodes_to_filter = []38 39    filtered_graph = filter_nodes(G, nodes_to_filter)40 41    pos = nx.spring_layout(filtered_graph)42 43    node_trace = go.Scatter(44        x=[pos[n][0] for n in filtered_graph.nodes],45        y=[pos[n][1] for n in filtered_graph.nodes],46        text=list(filtered_graph.nodes),47        mode='markers+text',48        textposition='top center',49        marker=dict(size=20, color='LightSkyBlue', line=dict(width=2))50    )51 52    edge_trace = go.Scatter(53        x=(),54        y=(),55        line=dict(width=1.5, color='Gray'),56        hoverinfo='none',57        mode='lines'58    )59 60    annotations = []61    for edge in filtered_graph.edges:62        x0, y0 = pos[edge[0]]63        x1, y1 = pos[edge[1]]64        edge_trace['x'] += (x0, x1, None)65        edge_trace['y'] += (y0, y1, None)66 67        annotations.append(68            dict(69                ax=x0,70                ay=y0,71                axref='x',72                ayref='y',73                x=x1,74                y=y1,75                xref='x',76                yref='y',77                showarrow=True,78                arrowhead=2,79                arrowsize=1,80                arrowwidth=2,81                arrowcolor='Gray'82            )83        )84 85    fig = go.Figure(data=[edge_trace, node_trace],86                    layout=go.Layout(87                        showlegend=False,88                        hovermode='closest',89                        margin=dict(b=0, l=0, r=0, t=0),90                        annotations=annotations,91                        xaxis=dict(showgrid=False, zeroline=False),92                        yaxis=dict(showgrid=False, zeroline=False)93                    ))94 95    return fig96 97def filter_nodes(graph, nodes_to_remove):98    filtered_graph = graph.copy()99    for node in nodes_to_remove:100        if node in filtered_graph:101            filtered_graph.remove_node(node)102    return filtered_graph103 104if __name__ == '__main__':105    app.run_server(debug=True, port=8050, host='0.0.0.0')106 107