2017-03-07 236 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");