# 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

• So, you only expect to remove vertices, as opposed to adding them? – J. M.'s ennui Jun 4 '16 at 18:25
• Once there was GraphEdit I don't know if it still works in later versions: reference.wolfram.com/language/GraphUtilities/ref/… – mattiav27 Jun 4 '16 at 18:27
• yes, exactly @J.M. – hermano9 Jun 4 '16 at 18:28
• @mattiav27 Powerful undocumental function!I'm looking forward to you make it as an answer. :) – yode Jun 5 '16 at 0:39
• This is old but maybe can help: mathematica.stackexchange.com/q/31014/5478 – Kuba Jun 5 '16 at 7:31

## 1 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]
]
)
] • Great work! Out of curiousity, how did you make this *.gif? Any reference to where I could learn more about it? – e.doroskevic Jun 7 '16 at 8:19
• @E.Doroskevic Thanks :) I'm using SceenToGif, quite handy. – Kuba Jun 7 '16 at 8:22
• brilliant! Thank you very much! – e.doroskevic Jun 7 '16 at 8:24
• "but Graphs are not mutable" In fact Graphs are, weirdly, mutable, to such an extent that some undocumented functions do this: a=Graph[...]; b=a; undocumentedGraphFunction[b] — and now a is changed as well! I know that I am being nitpicky about a small comment, but this behaviour (not your comment) has really bothered me. – Szabolcs May 9 '17 at 8:09
• Here is a practical consequence of this mutability: the procedural solution here is much faster than the functional one. – Szabolcs May 9 '17 at 8:11