要旋轉說5種顏色時避免相同的相鄰的彩色,ABCDE
4片:ABCD
5片:ABCDE
7片:ABCDEAB
6片:ABCDEA
達達!兩個A是相鄰的。餅圖旋轉顏色
如何避免這種情況?
我很好切換到
6片:ABCDEB或者什麼,顏色順序無所謂
但是怎麼做到的?
要旋轉說5種顏色時避免相同的相鄰的彩色,ABCDE
4片:ABCD
5片:ABCDE
7片:ABCDEAB
6片:ABCDEA
達達!兩個A是相鄰的。餅圖旋轉顏色
如何避免這種情況?
我很好切換到
6片:ABCDEB或者什麼,顏色順序無所謂
但是怎麼做到的?
可以有很多方法的最大切片。最簡單的方法之一是擁有多個顏色集(具有不同數量的顏色)......並根據數據項的數量(餅圖中的扇區)更改顏色集。這裏是一個簡單的例子...改變要測試的數據的長度。
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
你可以使用這樣的東西來爲你的切片着色。
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)
}
}
是不是僅用於旋轉的顏色,而不是爲了避免相鄰的相同顏色的溶液?我正在使用它來旋轉顏色。 –
是的!你對旋轉的顏色是正確的。 2個相鄰顏色相同的唯一可能性是當n個切片的顏色(0)和顏色(n-1)相同時。 爲什麼不從一個返回顏色的函數做一個if檢查。如果顏色(0)和顏色(n-1)相同,則返回顏色(n-2)。檢查我的答案的編輯塊。 – Cyril