2016-05-30 121 views
2

要旋轉說5種顏色時避免相同的相鄰的彩色,ABCDE
4片:ABCD
5片:ABCDE
7片:ABCDEAB
6片:ABCDEA
達達!兩個A是相鄰的。餅圖旋轉顏色

如何避免這種情況?
我很好切換到
6片:ABCDEB或者什麼,顏色順序無所謂
但是怎麼做到的?

回答

0

可以有很多方法的最大切片。最簡單的方法之一是擁有多個顏色集(具有不同數量的顏色)......並根據數據項的數量(餅圖中的扇區)更改顏色集。這裏是一個簡單的例子...改變要測試的數據的長度。

DEMO

var colorSet1 = ["#98abc5", "#8a89a6", "#7b6888", "#6b486b"]; 
var colorSet2 = ["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56"]; 

var colorSet = data.length%2 == 0 ? colorSet1 : colorSet2; 

代碼從以上實例D3採取:https://bl.ocks.org/mbostock/3887235

0

你可以使用這樣的東西來爲你的切片着色。

color = d3.scale.ordinal() 
       .domain([0,1,2,3]) 
       .range(["red", "green", "blue", "pink"]);; 
color(0);//red 
color(1);//green 
color(2);//blue  
color(3);//pink 
color(4);//red 
color(5);//green 
...so on //so the slice index can decide the color, using the scale. 

編輯

做這樣的函數,以確保沒有相鄰顏色相同。

這裏sliceNumber是餅圖在餅圖中的索引。 這裏maxSlices是餅圖這樣的

function getMyColor(sliceNumber,maxSlices){ 
    if ((sliceNumber == maxSlices) && (color(sliceNumber) == color(maxSlices))){ 
     return color(sliceNumber + 1) 
    } else { 
     return color(sliceNumber) 
    } 
} 
+0

是不是僅用於旋轉的顏色,而不是爲了避免相鄰的相同顏色的溶液?我正在使用它來旋轉顏色。 –

+0

是的!你對旋轉的顏色是正確的。 2個相鄰顏色相同的唯一可能性是當n個切片的顏色(0)和顏色(n-1)相同時。 爲什麼不從一個返回顏色的函數做一個if檢查。如果顏色(0)和顏色(n-1)相同,則返回顏色(n-2)。檢查我的答案的編輯塊。 – Cyril