2016-05-03 78 views
2

當我處理餅圖的數據時,我將所有小值合併到「其他」中。圖表使用d3.scale.category20着色。如何從顏色集中將「其他」指定爲特定顏色(淺灰色),並使用默認方法指定其他值?d3:爲特定值分配顏色

更新:我正在尋找一種慣用的D3解決方案,如果有的話。還有什麼我可以破解自己。

+0

您能否提供繪製路徑的部分?所以我可以告訴你如何去做。另外,請說明如何創建「其他」。 –

+0

我很使用[這裏]的代碼(https://bl.ocks.org/mbostock/3887235)。除了我將顏色變量改爲'd3.scale.category20'。 '其他'是在python中計算出來的,並將其餘數據作爲另一個(最後一個)行傳入。 –

+0

我刪除了我的答案,一旦它沒有幫助你。正如我所說,最好的方法就是創建你自己的序數標度,定義域。看看Bostock在這裏寫的是什麼:https://groups.google.com/forum/#!msg/d3-js/jsEmhdT9wiU/Xv3Mqql75vYJ –

回答

0

沒有灰色創建自己的d3.scale.category20

var myCategory20Colors = [ 
    0x1f77b4, 0xaec7e8, 
    0xff7f0e, 0xffbb78, 
    0x2ca02c, 0x98df8a, 
    0xd62728, 0xff9896, 
    0x9467bd, 0xc5b0d5, 
    0x8c564b, 0xc49c94, 
    0xe377c2, 0xf7b6d2, 
    0xbcbd22, 0xdbdb8d, 
    0x17becf, 0x9edae5 
].map(function(x) { 
    var value = x + ""; 
    return d3.rgb(value >> 16, value >> 8 & 0xff, value & 0xff).toString(); 
}); 

var myCategory20 = d3.scale.ordinal().range(myCategory20Colors); 

var original = d3.scale.category20(); 

console.log(original("x"), original("y")); 

console.log(myCategory20("x"), myCategory20("y")); 
// they produce the same result #1f77b4 #aec7e8 

從列表中(我刪除0x7f7f7f, 0xc7c7c7,),你可以用你自己的顏色代替他們。

然後,您可以簡單地檢查着色時的數據。

g.append("path") 
     .attr("d", arc) 
     .style("fill", function(d) { 
     if(d.yourRowName == "Other") { 
      return "grey"; 
     } else { 
      return myCategory20(d.data.age); 
     } 
     }); 
+0

這不起作用,因爲其他類別中的其他類別也將從category20集合中分配灰色。 –

+0

@DmitryB。編輯來解決這個問題。 – paradite

+0

對不起,我應該先提及我正在尋找一種慣用的D3解決方案。我已經有一個就地破解:) –