I wonder about how I could make a Graph
scale automatically when I vary the size of the vertices.
I would like to visualize information with a Graph
. The vertices all have e.g. additional info like a weight which I would like to visualize with the vertices drawn with different sizes.
However, when I define the sizes, the graph keeps the original (as opposed to the new) layout. The graph then becomes invisible.
Graph[{1 \[UndirectedEdge] 2, 2 \[UndirectedEdge] 3,3 \[UndirectedEdge] 1, 3 \[UndirectedEdge] 4}]
shows:
Now I add the "weight"
Graph[{1 \[UndirectedEdge] 2, 2 \[UndirectedEdge] 3,3 \[UndirectedEdge] 1, 3 \[UndirectedEdge] 4},VertexSize -> {1 -> 1.1, 2 -> 1.2, 3 -> 1.3, 4 -> 1.4}]
This shows:
What I would like is that the Graph would be like
Any thoughts?
This is a graph currently working on. As you can see one vertex hits his neighbour. I would expect MM to or reposition this vertex a bit further or to scale down all nodes. Of course this can be done by dividing the vertexes by a number. But this is manual work to see what looks best. I hope there is another way.
Answer
Does the following do what you want?
WeightedGraph[edges_, weights_, options___]:=
Block[{maxweight=Max[#[[2]]&/@weights]},
Graph[edges,VertexSize->((#[[1]]->0.9*#[[2]]/maxweight)&/@weights),options]]
WeightedGraph[{1 \[UndirectedEdge] 2, 2 \[UndirectedEdge] 3,
3 \[UndirectedEdge] 1, 3 \[UndirectedEdge] 4},
(*weights:*) {1 -> 1.1, 2 -> 1.2, 3 -> 1.3, 4 -> 1.4}]
The second line is basically your Graph
call, except that it uses WeightedGraph
instead of Graph
, and the weights don't have VertexSize->
in front of them.
Comments
Post a Comment