5
$\begingroup$

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):

Mathematica output

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

$\endgroup$
  • 1
    $\begingroup$ try changing Rectangle[...] to Disk[{xc, yc}, Min[w, h]] or use any other function of w and h to control the radius. $\endgroup$ – kglr Sep 28 '12 at 0:46
  • $\begingroup$ @kguler Thank you very much, this worked. $\endgroup$ – arshajii Sep 28 '12 at 0:53
  • $\begingroup$ 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. $\endgroup$ – kglr Sep 28 '12 at 1:32
12
$\begingroup$

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", Center], 
   VertexLabelStyle -> Directive[20, Red, Bold, Italic], 
   GraphLayout -> "CircularEmbedding", ImageSize -> 350, 
   EdgeStyle -> Blue];

Graph[{1 <-> 2, 2 <-> 3, 3 <-> 1}, options]

enter image description here

$\endgroup$
  • $\begingroup$ Placed["Name", Center] works too. $\endgroup$ – Szabolcs Dec 30 '17 at 11:02
  • $\begingroup$ @Szabolcs, yes, thank you. Made the change. $\endgroup$ – kglr Dec 30 '17 at 11:05
1
$\begingroup$

According to google you are supposed to use VertexRenderingFunction.

$\endgroup$
  • 1
    $\begingroup$ Not too sure, but I think that works with GraphPlot, not with Graph... $\endgroup$ – cormullion Sep 28 '12 at 17:46
1
$\begingroup$

Try:

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

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

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.