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]
]
)
]
Comments
Post a Comment