簡體   English   中英

使用d3繪制路徑?

[英]Path drawing with d3?

我正在嘗試使用d3生成路徑並按數據集設置顏色。 路徑的顏色由“ Req”設置,繪制路徑由點集設置,但是在獲取數據時我遇到了一些解析問題。 我的數據格式如下所示。

var feature = {"section":[
  {"ID": 1,"Req": 10,"Name": "Jame","point": [{"x": 1,"y": 1},{"x": 5,"y": 5},{"x": 20,"y": 30},{"x": 200,"y": 200}]},
  {"ID": 2,"Req": 20,"Name": "John","point": [{"x": 1,"y": 1},{"x": 7,"y": 10},{"x": 100,"y": 10},{"x": 20,"y": 200}]}  
]};

為了獲得數據集中的x和y坐標,我具有以下行生成器的功能:

var line = d3.svg.line()
     .interpolate("linear")
     .x(function(d) { d.point.forEach(function(a){ return a.x;});})
     .y(function(d) { d.point.forEach(function(a){ return a.y;});});

我在數據集中將路徑的樣式顏色設置為“ Req”。

canvas.selectAll("path")
    .data(feature.section)
    .enter()
    .append("path")
    .attr("d", line(feature.section))
    .attr("fill", "none")
    .style("stroke", function(d) {
       var returnColor;
       if (d.Req > 5){returnColor ="green";}
       else if (d.Req > 10){returnColor ="purple";}
       else if (d.Req > 15){returnColor ="red";}
       else{returnColor = "#ccc";}
       return returnColor;
    });

但是我沒有在屏幕上顯示任何線條。 調試控制台始終顯示錯誤:解析d =“ MNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaN”時出現問題。

我錯過了什么?

您還可以在http://jsfiddle.net/agadoo/RZQxV/上看到我的代碼示例。

看來您要畫幾條路徑,每個請求ID一條。 在這種情況下,您需要的是嵌套選擇

要繪制路徑,您需要將一個數組傳遞給.data()函數,並在d3.svg.line()定義中提供xy函數,以從該數組的每個元素中提取相關數據。 也就是說,您在此處指定的函數應返回恰好一個點的xy坐標。 因此,您將其更改為類似

.x(function(d) { return d.x; })

我在這里修改了您的jsfiddle。 請注意,在這種情況下,您無法再以與以前相同的方式獲得線條的顏色,因為該數據在該級別上不可用。 有多種方法可以解決此問題,最直接的方法可能是重新格式化數據。 d3數組函數(特別是d3.nest()函數 )在這里應該會有所幫助。

最后,設置線條顏色的檢查無法按預期進行。 d.Req > 5為真,如果d.Req > 10 ,所以你的第二個和第三個條件永遠不會,因為他們已經被第一個覆蓋滿足。

暫無
暫無

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

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