2017-03-07 62 views
0

我有一個d3折線圖的小視覺問題。如何使d3線條圖中的線條更平滑?

也許任何人有這個簡短的解決方案:

我想有以下平滑的三條線比他們。

enter image description here

我寧願希望有線條看起來像這樣:

enter image description here

我已經選中,這不是筆畫寬度導致這種錯誤的視覺行爲。

如果問題不清楚:基本上,我想實現更高的圖表分辨率,看起來像是由更大的像素組成。

這是代碼,導致這個結果:

var temp = g.selectAll(".temp") 
     .data(stationData) 
     .enter().append("g") 
     .attr("class", "temp"); 

    let values = stationData.map(function(d){ 
     return { 
      "hour": parseFloat(d.hour), 
      "temperature": parseFloat(d.avgtemp) 
     } 
    }); 
    temp.append("path") 
     .attr("id", "avgtemp") 
     .attr("class", "line") 
     .attr("d", function(d) { 
      return line(values); 
     }) 
    temp.append("text") 
     .datum(function(d) { return {value: values[values.length - 1]}; }) 
     .attr("transform", function(d) { return "translate(" + x(d.value.hour) + "," + y(d.value.temperature) + ")"; }) 
     .attr("x", 3) 
     .attr("dy", "0.35em") 
     .style("font", "12px sans-serif") 
     .text("Avg Temperature"); 


    values = stationData.map(function(d){ 
     return { 
      "hour": parseFloat(d.hour), 
      "temperature": parseFloat(d.mintemp) 
     } 
    }); 
    temp.append("path") 
     .attr("id", "mintemp") 
     .attr("class", "line") 
     .attr("d", function(d) { 
      return line(values); 
     }) 
    temp.append("text") 
     .datum(function(d) { return {value: values[values.length - 1]}; }) 
     .attr("transform", function(d) { return "translate(" + x(d.value.hour) + "," + y(d.value.temperature) + ")"; }) 
     .attr("x", 3) 
     .attr("dy", "0.35em") 
     .style("font", "12px sans-serif") 
     .text("Min Temp"); 

    values = stationData.map(function(d){ 
     return { 
      "hour": parseFloat(d.hour), 
      "temperature": parseFloat(d.maxtemp) 
     } 
    }); 
    temp.append("path") 
     .attr("id", "maxtemp") 
     .attr("class", "line") 
     .attr("d", function(d) { 
      return line(values); 
     }) 
    temp.append("text") 
     .datum(function(d) { return {value: values[values.length - 1]}; }) 
     .attr("transform", function(d) { return "translate(" + x(d.value.hour) + "," + y(d.value.temperature) + ")"; }) 
     .attr("x", 3) 
     .attr("dy", "0.35em") 
     .style("font", "12px sans-serif") 
     .text("Max Temp"); 
+0

既然您還沒有分享您的代碼,我不確定真正的問題。但是,仍然在d3圖表中看到類似的問題,即多個路徑使用相同的d屬性繪製。確認圖表中沒有這樣的重複路徑。 – Gilsha

+1

謝謝soo!我完全忘記了,當你有多個實例時,它會看起來像這樣。 我有一個selectAll()。輸入(數據)語句的問題! 現在它的工作非常感謝你! – byebb

回答

0

的問題是很容易解決:

我有內D3聲明我的代碼,多次添加相同的圖。其實我的數據集內的數據項,這是由於此代碼段的數量:

var temp = g.selectAll(".temp") 
     .data(stationData) 
     .enter().append("g") 
     .attr("class", "temp"); 

結果現在是:

enter image description here

我基本上不得不改變是全部更換溫度變量與,這是當前的臨時的父和SVG的子:

var temp = g.selectAll(".temp") 
     .data(stationData) 
     .enter().append("g") 
     .attr("class", "temp"); 

    let values = stationData.map(function(d){ 
     return { 
      "hour": parseFloat(d.hour), 
      "temperature": parseFloat(d.avgtemp) 
     } 
    }); 
    g.append("path") 
     .attr("id", "avgtemp") 
     .attr("class", "line") 
     .attr("d", function(d) { 
      return line(values); 
     }) 
    g.append("text") 
     .datum(function(d) { return {value: values[values.length - 1]}; }) 
     .attr("transform", function(d) { return "translate(" + x(d.value.hour) + "," + y(d.value.temperature) + ")"; }) 
     .attr("x", 3) 
     .attr("dy", "0.35em") 
     .style("font", "12px sans-serif") 
     .text("Avg Temperature"); 


    values = stationData.map(function(d){ 
     return { 
      "hour": parseFloat(d.hour), 
      "temperature": parseFloat(d.mintemp) 
     } 
    }); 
    g.append("path") 
     .attr("id", "mintemp") 
     .attr("class", "line") 
     .attr("d", function(d) { 
      return line(values); 
     }) 
    g.append("text") 
     .datum(function(d) { return {value: values[values.length - 1]}; }) 
     .attr("transform", function(d) { return "translate(" + x(d.value.hour) + "," + y(d.value.temperature) + ")"; }) 
     .attr("x", 3) 
     .attr("dy", "0.35em") 
     .style("font", "12px sans-serif") 
     .text("Min Temp"); 

    values = stationData.map(function(d){ 
     return { 
      "hour": parseFloat(d.hour), 
      "temperature": parseFloat(d.maxtemp) 
     } 
    }); 
    g.append("path") 
     .attr("id", "maxtemp") 
     .attr("class", "line") 
     .attr("d", function(d) { 
      return line(values); 
     }) 
    g.append("text") 
     .datum(function(d) { return {value: values[values.length - 1]}; }) 
     .attr("transform", function(d) { return "translate(" + x(d.value.hour) + "," + y(d.value.temperature) + ")"; }) 
     .attr("x", 3) 
     .attr("dy", "0.35em") 
     .style("font", "12px sans-serif") 
     .text("Max Temp");