block by wboykinm 4465112

51-Class hierarchical clustering of ecoregions into biodiversity driver zones

Full Screen

Based on the most excellent dendrogram work of Mike Bostock leveraging d3, this shows the nested scales by which the ~10,000 global ecoregions combine in clusters that have similar drivers of species richness (land use intensity, climate, etc.). Data is from forthcoming work by Bill Morris on geographically-weighted regression and ecological segmentation; it would be “done” rather than “forthcoming” if Bill would spend less time on dataviz and more on writing his %$&#ing dissertation.

index.html

<!DOCTYPE html>
<meta charset="utf-8">
<title>Flare Dendrogram</title>
<style>

.node circle {
  fill: #fff;
  stroke: #003EFF;
  stroke-width: 1.3px;
}

.node circle:hover {
  fill: blue !important;
}
.node {
  font: 10px sans-serif;
}

.link {
  fill: none;
  stroke: #00beff;
  stroke-width: 0.8px;
}

</style>
<body>
<script src="//d3js.org/d3.v3.min.js"></script>
<script>

var radius = 960 / 2;

var cluster = d3.layout.cluster()
    .size([360, radius - 120]);

var diagonal = d3.svg.diagonal.radial()
    .projection(function(d) { return [d.y, d.x / 180 * Math.PI]; });

var svg = d3.select("body").append("svg")
    .attr("width", radius * 2)
    .attr("height", radius * 2)
  .append("g")
    .attr("transform", "translate(" + radius + "," + radius + ")");

d3.json("ecogwr51.json", function(error, root) {
  var nodes = cluster.nodes(root);

  var link = svg.selectAll("path.link")
      .data(cluster.links(nodes))
    .enter().append("path")
      .attr("class", "link")
      .attr("d", diagonal);

  var node = svg.selectAll("g.node")
      .data(nodes)
    .enter().append("g")
      .attr("class", "node")
      .attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + d.y + ")"; })

  node.append("circle")
      .attr("r", 4.5);

  node.append("text")
      .attr("dy", ".5em")
      .attr("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; })
      .attr("transform", function(d) { return d.x < 180 ? "translate(8)" : "rotate(180)translate(-8)"; })
      .text(function(d) { return d.name; });
});

d3.select(self.frameElement).style("height", radius * 2 + "px");

</script>

ecogwr51.json

{
    "name": "global",
    "children": [
        {
            "name": "cluster 1-1",
            "children": [
                {
                    "name": "cluster 2-1",
                    "tvsr": 378,
                    "children": [
                        {
                            "name": "cluster 3-1",
                            "tvsr": 378
                        }
                    ]
                }
            ]
        },
        {
            "name": "cluster 1-2",
            "children": [
                {
                    "name": "cluster 2-2",
                    "tvsr": 241,
                    "children": [
                        {
                            "name": "cluster 3-2",
                            "tvsr": 215
                        },
                        {
                            "name": "cluster 3-3",
                            "tvsr": 284
                        },
                        {
                            "name": "cluster 3-4",
                            "tvsr": 233
                        }
                    ]
                },
                {
                    "name": "cluster 2-3",
                    "tvsr": 405,
                    "children": [
                        {
                            "name": "cluster 3-5",
                            "tvsr": 405
                        }
                    ]
                },
                {
                    "name": "cluster 2-4",
                    "tvsr": 170,
                    "children": [
                        {
                            "name": "cluster 3-6",
                            "tvsr": 217
                        },
                        {
                            "name": "cluster 3-7",
                            "tvsr": 126
                        }
                    ]
                },
                {
                    "name": "cluster 2-5",
                    "tvsr": 414,
                    "children": [
                        {
                            "name": "cluster 3-8",
                            "tvsr": 570
                        },
                        {
                            "name": "cluster 3-9",
                            "tvsr": 238
                        },
                        {
                            "name": "cluster 3-10",
                            "tvsr": 366
                        },
                        {
                            "name": "cluster 3-11",
                            "tvsr": 447
                        }
                    ]
                },
                {
                    "name": "cluster 2-6",
                    "tvsr": 299,
                    "children": [
                        {
                            "name": "cluster 3-12",
                            "tvsr": 325
                        },
                        {
                            "name": "cluster 3-13",
                            "tvsr": 278
                        },
                        {
                            "name": "cluster 3-14",
                            "tvsr": 403
                        },
                        {
                            "name": "cluster 3-15",
                            "tvsr": 417
                        },
                        {
                            "name": "cluster 3-16",
                            "tvsr": 112
                        }
                    ]
                },
                {
                    "name": "cluster 2-7",
                    "tvsr": 286,
                    "children": [
                        {
                            "name": "cluster 3-17",
                            "tvsr": 262
                        },
                        {
                            "name": "cluster 3-18",
                            "tvsr": 339
                        }
                    ]
                }
            ]
        },
        {
            "name": "cluster 1-3",
            "children": [
                {
                    "name": "cluster 2-8",
                    "tvsr": 378,
                    "children": [
                        {
                            "name": "cluster 3-19",
                            "tvsr": 203
                        },
                        {
                            "name": "cluster 3-20",
                            "tvsr": 558
                        },
                        {
                            "name": "cluster 3-21",
                            "tvsr": 758
                        },
                        {
                            "name": "cluster 3-22",
                            "tvsr": 810
                        }
                    ]
                }
            ]
        },
        {
            "name": "cluster 1-4",
            "children": [
                {
                    "name": "cluster 2-9",
                    "tvsr": 774,
                    "children": [
                        {
                            "name": "cluster 3-23",
                            "tvsr": 491
                        },
                        {
                            "name": "cluster 3-24",
                            "tvsr": 320
                        },
                        {
                            "name": "cluster 3-25",
                            "tvsr": 1016
                        },
                        {
                            "name": "cluster 3-26",
                            "tvsr": 764
                        }
                    ]
                }
            ]
        },
        {
            "name": "cluster 1-5",
            "children": [
                {
                    "name": "cluster 2-10",
                    "tvsr": 480,
                    "children": [
                        {
                            "name": "cluster 3-27",
                            "tvsr": 490
                        },
                        {
                            "name": "cluster 3-28",
                            "tvsr": 571
                        },
                        {
                            "name": "cluster 3-29",
                            "tvsr": 322
                        }
                    ]
                }
            ]
        },
        {
            "name": "cluster 1-6",
            "children": [
                {
                    "name": "cluster 2-11",
                    "tvsr": 486,
                    "children": [
                        {
                            "name": "cluster 3-30",
                            "tvsr": 207
                        },
                        {
                            "name": "cluster 3-31",
                            "tvsr": 553
                        }
                    ]
                },
                {
                    "name": "cluster 2-12",
                    "tvsr": 597,
                    "children": [
                        {
                            "name": "cluster 3-32",
                            "tvsr": 556
                        },
                        {
                            "name": "cluster 3-33",
                            "tvsr": 845
                        },
                        {
                            "name": "cluster 3-34",
                            "tvsr": 316
                        },
                        {
                            "name": "cluster 3-35",
                            "tvsr": 802
                        }
                    ]
                }
            ]
        },
        {
            "name": "cluster 1-7",
            "children": [
                {
                    "name": "cluster 2-13",
                    "tvsr": 482,
                    "children": [
                        {
                            "name": "cluster 3-36",
                            "tvsr": 482
                        }
                    ]
                },
                {
                    "name": "cluster 2-14",
                    "tvsr": 406,
                    "children": [
                        {
                            "name": "cluster 3-37",
                            "tvsr": 506
                        },
                        {
                            "name": "cluster 3-38",
                            "tvsr": 136
                        },
                        {
                            "name": "cluster 3-39",
                            "tvsr": 442
                        }
                    ]
                },
                {
                    "name": "cluster 2-15",
                    "tvsr": 440,
                    "children": [
                        {
                            "name": "cluster 3-40",
                            "tvsr": 372
                        },
                        {
                            "name": "cluster 3-41",
                            "tvsr": 554
                        }
                    ]
                },
                {
                    "name": "cluster 2-16",
                    "tvsr": 454,
                    "children": [
                        {
                            "name": "cluster 3-42",
                            "tvsr": 454
                        }
                    ]
                }
            ]
        },
        {
            "name": "cluster 1-8",
            "children": [
                {
                    "name": "cluster 2-17",
                    "tvsr": 688,
                    "children": [
                        {
                            "name": "cluster 3-43",
                            "tvsr": 680
                        },
                        {
                            "name": "cluster 3-44",
                            "tvsr": 766
                        },
                        {
                            "name": "cluster 3-45",
                            "tvsr": 582
                        }
                    ]
                },
                {
                    "name": "cluster 2-18",
                    "tvsr": 485,
                    "children": [
                        {
                            "name": "cluster 3-46",
                            "tvsr": 485
                        }
                    ]
                }
            ]
        },
        {
            "name": "cluster 1-9",
            "children": [
                {
                    "name": "cluster 2-19",
                    "tvsr": 598,
                    "children": [
                        {
                            "name": "cluster 3-47",
                            "tvsr": 654
                        },
                        {
                            "name": "cluster 3-48",
                            "tvsr": 558
                        }
                    ]
                }
            ]
        },
        {
            "name": "cluster 1-10",
            "children": [
                {
                    "name": "cluster 2-20",
                    "tvsr": 520,
                    "children": [
                        {
                            "name": "cluster 3-49",
                            "tvsr": 536
                        },
                        {
                            "name": "cluster 3-50",
                            "tvsr": 603
                        },
                        {
                            "name": "cluster 3-51",
                            "tvsr": 481
                        }
                    ]
                }
            ]
        }
    ]
}