D3js中的四色定理用于邻域多边形着色?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D3js中的四色定理用于邻域多边形着色?相关的知识,希望对你有一定的参考价值。
杰森戴维斯图形着色并没有避免我得到相同颜色的邻居多边形。
.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通常就足够了)
也可以看看:
注意:标签#four-color-theorem可能是受欢迎的。
答案
你介意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); }); });
你想为特定的地图上色吗?提前设置颜色方案可能更容易,而不是尝试编写每个客户端运行的算法。
另一答案
不,没有这样的实施。在我看来,D3不是最好的实现它,因为它的设计主要假设数据是独立的。
以上是关于D3js中的四色定理用于邻域多边形着色?的主要内容,如果未能解决你的问题,请参考以下文章