I have created a block model in networkx, against a Louvian best fit partitioning of a social graph. This model includes for each block model cluster:
- number of edges
- number of nodes
as well as this edge property:
- weight which = cross-cluster links
I visualized this as a network, and the varying thickness of connections between clusters is interesting. Clusters connect to other clusters at varying rates, and this is can be interpreted as business logic.
I believe a Circos chart will visualize this much better, so I am creating a circosJS chart using d3. This is what a first pass looks like:
To start, I have made the width of each circle span equal to the number of nodes in that cluster. Now I need to map the width of the sending and receiving ends of the chords. This scale is different than the number of nodes within a cluster, as it represents the number of connections between clusters.
I have three questions:
- How should I determine the width of the base of a chord, given the data I have? I can choose number of nodes or edges in that cluster, or something based on the in/out-bound connections to that cluster.
- How should I determine how much of a chord an outbound connection spans?
- How should I determine how much of a chord an in-bound connection spans?
- Is there another, better visualization type without these tough choices?
If I choose a within-cluster metric for the chord base, I switch units when I determine chord start/end width using between-cluster metrics. I think this will tend to distort the visualization. On the other hand, if I choose something like the total in-bound connections between clusters, I get to use the same unit but I ignore the raw size of a cluster. Neither solutions seems desirable.