Jason图的着色并没有避免我得到相同颜色的邻居多边形。
.style("fill", function(d, i) { return color(d.color = d3.max(neighbors[i], function(n) { return countries[n].color; }) + 1 | 0); });
四色定理:
我们知道:
四色映射定理指出,如果将平面分割成相邻区域,产生一个称为映射的图形,则不需要超过四种颜色就可以对地图的区域着色,这样就不会有两个相邻区域具有相同的颜色。(维基百科)
以及:
第二,为了定理的目的,每个“国家”都必须是一个简单的连通区域,或者是相邻的区域。..。因为非毗连国家的领土必须是同一种颜色,四种颜色可能不够。(维基百科)
尽管如此,是否有任何四色定理样的实现/函数可供#D3js使用,因此我们可以得到具有不同颜色的相邻多边形? (因此我们不使用20种颜色,因为4-6颜色通常足够)。
还请参见:
注:标签#四色定理可能是受欢迎的。
发布于 2013-07-01 08:48:02
你介意8种颜色吗?减少可能的颜色数量非常简单:
color.range(color.range().slice(0, 8));
http://bl.ocks.org/1wheel/5899035
7种颜色会导致一些相邻的国家共享一条边界。
在着色之前,我还试着按邻国的数量对这些国家进行排序;7种颜色仍然不起作用:
var permutation = d3.range(neighbors.length).sort(function(i, j){
return neighbors[j].length - neighbors[i].length; });
countries = d3.permute(countries, permutation);
neighbors = d3.permute(neighbors, permutation)
.map(function(array){
return array.map(function(d){
return permutation.indexOf(d); }); });
你想给一张特定的地图涂颜色吗?可能更容易提前设置配色方案,而不是尝试编写每个客户端运行的算法。
发布于 2013-07-01 08:29:52
不,没有这样的实施。在我看来,D3也不是最好的实现方法,因为它的设计主要假设数据是独立的。
https://stackoverflow.com/questions/17395167
复制相似问题