Skip to main content

dynamic - Clickable graph



Can someone help me to make a clickable graph?


  Graph[{1 -> 3, 2 -> 3, 3 -> 6, 4 -> 6, 1 -> 5, 5 -> 4, 6 -> 2}]

I found that VertexDelete removes desirable vertex and edges, but I don't know how to make it clickable and delete that vertex (and his edges) which was clicked by user.


I already have:


DynamicModule[
{ selection = {}
, gr = {1 -> 3, 2 -> 3, 3 -> 6, 4 -> 6, 1 -> 5, 5 -> 4, 6 -> 2}
}
, Dynamic[

Graph[gr
, PlotLabel -> selection
, VertexShapeFunction -> ( EventHandler[Disk[#1, .1]
, "MouseClicked" :> (selection = #2; VertexDelete[gr, selection];
)] &)
]
]
]

but it doesn't work




Answer



You are almost there but VertexDelete[graph, n] or e.g. SetProperty[graph, spec] won't affect graph they way you are expecting unless you set it again: graph = VertexDelete[graph, n].


DynamicModule[{graph}
, Dynamic[graph]
, Initialization :> (
graph = Graph[
{1 -> 3, 2 -> 3, 3 -> 6, 4 -> 6, 1 -> 5, 5 -> 4, 6 -> 2}
, VertexLabels -> "Name"
, PerformanceGoal -> "Quality"
, VertexShapeFunction -> ( EventHandler[ Disk[#1, .1]

, "MouseClicked" :> (graph = VertexDelete[graph, #2];)
] & )
]
)
]

And if you want to keep original VertexCoordinates you need to set them explicitly first:


 DynamicModule[{graph}
, Dynamic[graph]
, Initialization :> (

graph = Graph[
{1 -> 3, 2 -> 3, 3 -> 6, 4 -> 6, 1 -> 5, 5 -> 4, 6 -> 2}
, VertexLabels -> "Name"
, PerformanceGoal -> "Quality"
, VertexShapeFunction -> ( EventHandler[ Disk[#1, .1]
, "MouseClicked" :> (graph = VertexDelete[graph, #2];)
, Method -> "Queued" (*should help for bigger graphs*)
] & )
]
; graph = SetProperty[graph,

VertexCoordinates -> GraphEmbedding[graph]
]
)
]

enter image description here


Comments