Visually organize weighted network

Background

I have a weighted network, where each node/vertex is a person. The weight of the connection between each node represents the level of interaction between the two. Each node is represented visually by the photo of the person, and every pair of nodes has a connection (of varying weight) between it.

There are two sets of data; the first data set has about 100 nodes, the second about 450.

My question is: How should the nodes be arranged? I have five ideas:

1. Circle
• Place all nodes in one big circle, with the lines intersecting inside it.
2. Importance
• Place the nodes with the most strong connections closer to the middle.
• To program: second hardest.
3. Distance
• Place the nodes such that the average distance between strong connections is minimized. Basically, make stronger connections closer to each other.
• To program: hardest.
4. Geography
• Place the nodes based on their geographic location.
• To program: easiest.
5. Random
• Place the nodes randomly in a space.
• To program: second easiest.

Which of these options would be the best for visualizing the data? Which is the worst? Would it be best to allow the option to switch between a couple of them? Do you have any other suggestions?

• Hi, Dopapp! Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. Commented Mar 20, 2018 at 4:43
• @PavelRyzhov, is the question better now? Commented Mar 20, 2018 at 4:58
• Dopapp, surely, looks clearer to me. Commented Mar 20, 2018 at 5:16

The kinds of diagram you're talking about each do slightly different things. I'll go through each of the types you mention and try to talk a bit more about what they're good for. Which is better for visualizing the data depends very much on what you're trying to find or show in the data.

1 - Chord diagram

and they're good at showing how things relate, but not so good at showing strengths of each relationship if there are a lot of them to show. They can also end up masking clusters of related things if the relationships are complex and leave a mess of lines all over the place. If they get too busy then they can be hard to follow.

2 - Many strong links in middle

I don't know what I'd call this one, but you'd probably get something very similar to it by working with #3 anyway...

3 - Force-directed layout

There are various implementations of these out there. My understanding is that, by default, they make all lengths the same... but most of the implementations have a means to change that. For example, the d3.js implementation lets you set a link distance for each relationship which sets the optimal length of that line. You could determine the link distance for each relationship based on the strength of the relationship. This would cause the strongly related things to clump together and the weakly related things to pull apart.

I've also seen versions where a higher number of relations to a node causes that node to be rendered at a larger size - which could have a similar effect.

There are a lot of off-the-shelf tools for force-directed layouts out there which could probably bear the brunt of a lot of the required coding effort. d3 would be my start point if I had to make a library recommendation, but that's just because it's well known and widely used.

4 - Geography based

This idea is the only place where you mention geography in the entire question. Is the geography important enough to base the visualization on? If you do use this kind of visualization then you're limited in how you can show the strength of relationships, and clusters are going to be harder to see.

5 - ???

I have no idea how that would work, so can't really comment on it further.

My Recommendation

If you're trying to make it easy to see relationships between people AND to see how people group, I'd strongly suggest a force directed layout. With the number of nodes you're suggesting, performance could be an issue, but I think that would be the approach I'd start with.

If you're trying to see geographic clusters, then #4 could work - and I'd suggest a mix of line weight and line opacity to indicate the strength of each relationship.

• Do you think that indicating weight by line weight, line opacity, and (in the force directed layout) node proximity is too redundant? Or do you think that redundancy is beneficial? Commented Mar 21, 2018 at 18:15
• I think it could go either way, depending on the details and exact implementation - you'd have to try it and see. If you've already implemented a force directed graph visualization then I don't think adding a variable line weight or opacity is much work - so should be fairly easy to experiment with. Commented Mar 23, 2018 at 15:48