簡體   English   中英

使用 d3.js 設置餅圖顏色

[英]Setting pie chart colors using d3.js

我在使用 d3.pieChart 設置餅圖切片顏色時遇到問題。 我見過的文檔和示例將顏色方法與十六進制顏色數組結合使用。 但是,設置此選項會導致我的餅圖變為白色(不可見),並且圖例中的每個項目都變為黑色。

我試過將 .colors 與五個顏色的數組和六個顏色的數組一起使用,但問題仍然存在。 這可能是由於 slicesCap 的一些問題嗎?

下面的代碼片段,但類別 10 灼傷了我的眼睛,所以任何關於實現自定義顏色集的建議都將不勝感激!

pie
    .slicesCap(5)
    .legend(dc.legend().gap(3))
    .colors(d3.scale.category10())

僅傳遞一組顏色值是行不通的,因為.colors()函數需要一個類似於d3.scale.category10()創建的色標 秤是其采取輸入數據和返回值的函數; 在這種情況下,返回值是 10 種顏色之一。

對於初學者,您可以嘗試其他 d3 內置色階之一,它們沒有極端的對比度: https : //github.com/mbostock/d3/wiki/Ordinal-Scales#wiki-category20

如果這些都不適合,您可以使用自己的比例功能

var colorScale = d3.scale.ordinal().range([/*array of hex values */]);

pie.colors(colorScale);

您可以自己創建數組或使用colorBrewer函數之一。

如果要為特定值指定特定顏色(而不是僅按照它們出現的順序將顏色分配給值),則需要 (a) 將比例域指定為與順序匹配的值數組range 數組,以及 (b) 創建一個輔助函數,該函數從您的數據中傳入正確的屬性:

var colorScale = d3.scale.ordinal().domain(["banana", "cherry", "blueberry"])
                                   .range(["#eeff00", "#ff0022", "#2200ff"]);

pie.colors(function(d){ return colorScale(d.fruitType); });

您可以將顏色分配給這樣的特定值。

var colorScale = d3.scale.ordinal()
   .domain(["banana", "cherry", "blueberry"])
   .range(["#eeff00", "#ff0022", "#2200ff"]);

pie.colors(colorScale.range())
   .colorAccessor(function(d){ return colorScale.domain().indexOf(d.fruitType); });

這個解決方案有點笨拙,但我無法僅使用chart.colorDomain 使其工作,並且現在調用chart.colors 中的函數似乎會引發錯誤。

取笑 Tayden 的回答,較新版本的 d3(即“scaleOrdinal”)的語法略有不同

var colorScale = d3.scaleOrdinal()
   .domain(["banana", "cherry", "blueberry"])
   .range(["#eeff00", "#ff0022", "#2200ff"]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM