首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >邻域多边形着色的D3js四色定理?

邻域多边形着色的D3js四色定理?
EN

Stack Overflow用户
提问于 2013-06-30 21:46:56
回答 2查看 1.1K关注 0票数 2

Jason图的着色并没有避免我得到相同颜色的邻居多边形。

代码语言:javascript
运行
复制
.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颜色通常足够)。

还请参见:

  • 四色定理
  • 图定理
  • Jason图定理着色实例
  • D3着色

注:标签#四色定理可能是受欢迎的。

EN

回答 2

Stack Overflow用户

发布于 2013-07-01 08:48:02

你介意8种颜色吗?减少可能的颜色数量非常简单:

代码语言:javascript
运行
复制
color.range(color.range().slice(0, 8));

http://bl.ocks.org/1wheel/5899035

7种颜色会导致一些相邻的国家共享一条边界。

在着色之前,我还试着按邻国的数量对这些国家进行排序;7种颜色仍然不起作用:

代码语言:javascript
运行
复制
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); }); });

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

票数 1
EN

Stack Overflow用户

发布于 2013-07-01 08:29:52

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17395167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档