您需要
- 建立的屬性一些顏色尺度和功能你要的顏色上
- 使用它們來生成相應的選項中選擇元素
- 然後再打一個小程序該recolours節點
https://jsfiddle.net/vbpqn1e6/
這是這樣的東西的悲慘例子,它可以被收拾了一下/很多,但給出了原則:
var groupColor = d3.scaleOrdinal(d3.schemeCategory20);
var nameColor = d3.scaleLinear().domain([65,78,90]).range(["#f00", "#0f0", "#00f"]);
var madameColor = d3.scaleLinear().domain([true, false]).range(["#f00", "#aaa"]);
var colFuncs = {
"Group": function (d) { return groupColor (d.group); },
"Name": function (d) { return nameColor (d.id.substring(0,1).toUpperCase().charCodeAt(0)); },
"Madame?": function(d) { return madameColor (d.id.substring(0,2) === "Mm"); }
};
var currentColFunc = colFuncs["Group"];
d3.select("body").insert("select", ":first-child")
.on ("change", function() {
var e = d3.event;
if (e) {
currentColFunc = colFuncs[e.target.value];
updateColour();
}
})
.selectAll("option")
.data(d3.keys(colFuncs))
.enter()
.append("option")
.attr("value", function(d) { return d; })
.text (function(d) { return d; })
;
的.on("change")
事件偵聽選擇元素,當選擇一個選項,使用該選項的值設置當前的Color方案(currentColFunc
)。如果您想要更多選擇,只需在colFuncs
對象中添加更多選項即可。
這是再updateColour使用:
function updateColour() {
node.attr("fill", function(d) {
return currentColFunc(d);
});
}
這是偉大的,但它打破我的傳說代碼。當配色方案執行時,如何更新圖例? 'var legend = svg.selectAll(「。legend」).data(currentColFunc.domain())'不起作用(原因很明顯)。 – kaz