# Place graph vertex labels in circles

Consider the following code:

vsh[{xc_, yc_}, name_, {w_, h_}] := {LightYellow,
Rectangle[{xc - w, yc - h}, {xc + w, yc + h}],
Inset[Style[Text[name], 14, Black, Bold], {xc, yc}]};
options =
Sequence[VertexSize -> 0.1, VertexShapeFunction -> vsh,
GraphLayout -> "CircularEmbedding", ImageSize -> 350,
EdgeStyle -> Blue];

g1 = Graph[{1 -> 2, 1 -> 3, 2 -> 4, 3 -> 4}, options];
g1


The output will be a simple graph with vertex labels depicted in rectangles (as can be inferred from vsh):

My question is: how can I encapsulate the vertex labels in circles instead? Nothing I've tried seems to be working.

-
try changing Rectangle[...] to Disk[{xc, yc}, Min[w, h]] or use any other function of w and h to control the radius. – kglr Sep 28 '12 at 0:46
@kguler Thank you very much, this worked. – arshajii Sep 28 '12 at 0:53
A.R.S. my pleasure. It is always fun to play with custom shape function. I posted an alternative way to get the same result using options VertexStyle, VertexLabels and VertexLabelStyle. – kglr Sep 28 '12 at 1:32

## 3 Answers

You can change Rectangle[...] to Disk[{xc, yc}, Min[w, h]] or use any other function of w and h to control the disk radius.

But ... you can also get the same result without having to define a custom VertexShapeFunction using the options:

 options = Sequence[VertexStyle -> LightYellow,
VertexSize -> 0.15,
VertexLabels -> Placed["Name", {1/2, 1/2}],
VertexLabelStyle -> Directive[20, Red, Bold, Italic],
GraphLayout -> "CircularEmbedding", ImageSize -> 350,
EdgeStyle -> Blue];
Graph[{1 \[UndirectedEdge] 2, 2 \[UndirectedEdge] 3, 3 \[UndirectedEdge] 1}, options]


-

Try:

Rectangle[{xc - w, yc - h}, {xc + w, yc + h}, RoundingRadius -> 1000]


Rounded corners rather than circles can be had with smaller values.

-

According to google you are supposed to use VertexRenderingFunction.

-
Not too sure, but I think that works with GraphPlot, not with Graph... – cormullion Sep 28 '12 at 17:46