2013-06-30 46 views
2

傑森戴維斯圖着色並沒有避免我得到相同顏色的鄰居多邊形。鄰域多邊形着色的D3js中的四色定理?

.style("fill", function(d, i) { return color(d.color = d3.max(neighbors[i], function(n) { return countries[n].color; }) + 1 | 0); }); 

四色定理:

我們知道:

四個色地圖定理指出,鑑於飛機的相鄰區的任何分離,從而產生一個數字叫一張地圖,不超過四種顏色需要對地圖的區域進行着色,以便沒有兩個相鄰區域具有相同的顏色。 (維基百科)

Four color theorem in action

和:

其次,對於定理的目的每一個 「國家」 必須是一個單純連接區,或鄰接的。 [...]因爲[不相鄰國家]的領土必須是同一種顏色,所以四種顏色可能不夠。 (維基百科)

儘管如此,是否有四色定理樣實現/功能可供#D3js所以我們得到不同顏色的鄰居多邊形?(所以我們不會去使用20種顏色,因爲4-6是一般足夠)

參見:

注:標籤#四色定理可能會受到歡迎。

回答

0

不,沒有這樣的實現。在我看來,D3並不是最好的實現方式,因爲它的設計主要假設數據是獨立的。

2

你介意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

亞當這個鏈接被打破 – Toph

+0

你是怎麼知道的? –

+0

我是谷歌搜索d3四色! :) – Toph