0
我被要求在我的多線圖表中添加一個交互圖例。我的多線圖表有一個有兩個鍵的嵌套,它使我的傳說變得困難。以下是我用於添加交互式圖例的舊EAMPLE。D3多線圖表互動圖例問題
我的問題:
1)我想顯示圖例頂級鍵,以便它顯示SYSTEM01,system02,system03等,而不是顯示兩個鍵一起。例如,system01 0
和systmem01 2
變爲system01
,因此當它被點擊時它將隱藏兩條線。
2)使線條處於非活動狀態後,鼠標懸停在圖表上時仍會顯示工具提示。
這裏是我的FIDDLE
片段添加傳說:
var chartBody = svg.append("g")
.attr("class", "chartbody")
.attr("clip-path", "url(#clip)");
for (var key in storages) {
if (storages.hasOwnProperty(key)) {
console.log("key:", key, [storages[key]]);
var capSeries = d3.line()
.x(function(d) {
return x(d.date); })
.y(function(d) {
return y(d.availableVolumeCapacity); })
.curve(d3.curveCardinal);
// mapping of data to line using the capSeries function
chartBody.append("path")
.data([storages[key]])
.attr("class", "line")
.attr("id", 'tag'+ key.replace(/\s+/g, ''))
.attr("d", capSeries)
.style("stroke", z(key));
}
}
// spacing for the legend
legendSpace = width/nest.length;
// Loop through each symbol/key
nest.forEach(function(d,i) {
// Add the Legend
svg.append("text")
.attr("x", (legendSpace/2)+i*legendSpace) // space legend
.attr("y", height + (margin.bottom/2)+ 5)
.attr("class", "legend") // style the legend
.style("fill", function() { // Add the colours dynamically
return d.z = z(d.key); })
.on("click", function(){
// Determine if current line is visible
var active = d.active ? false : true,
newOpacity = active ? 0 : 1;
// Hide or show the elements based on the ID
d3.select("#tag"+d.key.replace(/\s+/g, ''))
.transition().duration(100)
.style("opacity", newOpacity);
// Update whether or not the elements are active
d.active = active;
})
.text(d.key);
});
我已經解決了你的問題no2,不明白問題1,很好看這個[link](https://jsfiddle.net/v6yabs4c/20/) –
我很抱歉沒有清楚地解釋我自己。我正在尋找組合圖例的子項。例如'system01 0'和'systmem01 2'變成'system01',所以當它被點擊時它將隱藏兩條線。 – Clarkus978
@ Clarkus978你可以改變顯示的文字,它會正常工作,看看我的回答 – mkaran