D3js中的四色定理用于邻域多边形着色?

问题描述 投票:2回答:2

杰森戴维斯图形着色并没有避免我得到相同颜色的邻居多边形。

.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可能是受欢迎的。

d3.js colors maps gis graph-coloring
2个回答
1
投票

你介意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); }); });

你想为特定的地图上色吗?提前设置颜色方案可能更容易,而不是尝试编写每个客户端运行的算法。


0
投票

不,没有这样的实施。在我看来,D3不是最好的实现它,因为它的设计主要假设数据是独立的。

© www.soinside.com 2019 - 2024. All rights reserved.