折线图未在图表上触及正确的值且线条平滑 [英] Line chart not hitting the right value on chart and has a smooth line

查看:88
本文介绍了折线图未在图表上触及正确的值且线条平滑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是我的折线图,其中我使用2行显示不同的值,

Below is my line graph where I am using 2 lines to show different values,

一行为蓝色,另一行为红色。

One line is blue and the other is red.

我希望这条线有尖锐的分数。我希望它坐在正确的vaule上,我有gievn。例如,如果'28 dec'是值'4'而'29 dec'是值'2'而'30 dec'是值'5',那么现在这些值并不完全达到数字,例如'Dec 25'值为3,但在图表上,线条低于3,看起来像2.5。这是因为线是一条平滑的线而不是一条锐利的线?

I want the line to have sharp points. and i would like the line it sit on the right vaule that i have gievn. for example if '28 dec' is value '4' and '29 dec' is value '2' and '30 dec' is value '5', Right now the values are not exactly hitting the number for example on 'Dec 25' the value is 3 but on the chart the line is going under 3 and it looks like 2.5. is this because the line is a smooth line and not a sharpe one?

我想看到线条上下有锋利的边缘并且不平滑。如果这是有道理的。我希望这是有道理的,因为我正在努力工作

I want to see the line go up and down with sharp edges and not smooth. if that makes sense. I hope it makes sense because i am struggling big time on that

我创建的js小提琴是: https://jsfiddle.net/dave1231/cexLbfnk/2/

the js fiddle i have created is: https://jsfiddle.net/dave1231/cexLbfnk/2/

如果有人能够告诉我如何欣赏这一点。

if someone is able to show me how i would appreciate that a lot.

提前感谢您!

这是我的HTML :

<div id="LineChart"></div>

这是我的CSS:

  #search {
     position:absolute;
    top: -2%;
 }

 #LineChart{
  text-align:center;
}

.tablebad thead tr {
    background-color: #eee;
}

.tablegood thead tr th {
    background-color: #eee;
}


path.line {
    fill: none;
    stroke: #004ecc;
    stroke-width: 4px;
  }

  path.line2 {
    fill: none;
    stroke: #cc0000;
    stroke-width: 4px;
  }

  path.area {
    fill: #e7e7e7;
  }

  .guideline {
    margin-right: 100px;
    float: right;
  }

  .axis path,
  .axis line {
    fill: none;
    stroke-width: 5px;
  }

  .x.axis path {
    display: none;
  }

  .y.axis path {
    display: none;
  }

  .grid .tick {
    stroke: black;
    stroke-width: 0.2px;

    }
#fade p {


    text-align: center;
    animation: fadein 4s;
    -moz-animation: fadein 4s; /* Firefox */
    -webkit-animation: fadein 4s; /* Safari and Chrome */
    -o-animation: fadein 4s; /* Opera */
}

#fade ul,li {

    animation: fadein 4s;
    -moz-animation: fadein 4s; /* Firefox */
    -webkit-animation: fadein 4s; /* Safari and Chrome */
    -o-animation: fadein 4s; /* Opera */
}
@keyframes fadein {
    from {
        opacity:0;
    }
    to {
        opacity:1;
    }
}
@-moz-keyframes fadein { /* Firefox */
    from {
        opacity:0;
    }
    to {
        opacity:1;
    }
}
@-webkit-keyframes fadein { /* Safari and Chrome */
    from {
        opacity:0;
    }
    to {
        opacity:1;
    }
}
@-o-keyframes fadein { /* Opera */
    from {
        opacity:0;
    }
    to {
        opacity: 1;
    }
}

这是我的d3.js:

var margin = {
    top: 0,
    right: 90,
    bottom: 30,
    left: 50
  },
  width = 1200 - margin.left - margin.right,
  height = 500 - margin.top - margin.bottom,
  padding = 1;

var parseDate = d3.time.format("%d-%b-%y").parse;

// Set the ranges
var x = d3.time.scale()
  .range([10, width - 15]);

var x2 = d3.scale.ordinal().rangePoints([10, width], .10)

var y = d3.scale.linear()
  .range([height, 100]);

var xAxis = d3.svg.axis().scale(x2)
  .orient("bottom")
  .tickFormat(d3.time.format("%b %d"))
  .ticks(4)
  .tickPadding(2);

var yAxis = d3.svg.axis().scale(y)
  .orient("left");

var valueline = d3.svg.line()
  .interpolate("basis")
  .x(function(d) {
    return x(d.date);
  })
  .y(function(d) {
    return y(d.XMAS);
  });

var valueline2 = d3.svg.line()
  .interpolate("basis")
  .x(function(d) {
    return x(d.date);
  })
  .y(function(d) {
    return y(d.JANSALES);
  });

//florida

var chart1 = d3.select("#LineChart")
  .append("svg")
  .attr("width", width + margin.left + margin.right)
  .attr("height", height + margin.top + margin.bottom)
  .append("g")
  .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

//needed for the grid
function make_y_axis() {
  return d3.svg.axis()
    .scale(y)
    .orient("left")
}

data1 = [{
    "date": "24-Dec-12",
    "XMAS": 2,
    "JANSALES": 0
  }, {
    "date": "25-Dec-12",
    "XMAS": 3,
    "JANSALES": 0
  },

  {
    "date": "26-Dec-12",
    "XMAS": 1,
    "JANSALES": 0
  },

  {
    "date": "27-Dec-12",
    "XMAS": 2.0,
    "JANSALES": 0
  },

  {
    "date": "28-Dec-12",
    "XMAS": 4.0,
    "JANSALES": 0
  },

  {
    "date": "29-Dec-12",
    "XMAS": 4.0,
    "JANSALES": 0
  }
  ,

  {
    "date": "29-Dec-12",
    "XMAS": 5,
    "JANSALES": 0
  },

  {
    "date": "30-Dec-12",
    "JANSALES": 3.0
  },

  {
    "date": "31-Dec-12",

    "JANSALES": 2.0
  },

  {
    "date": "01-Jan-13",

    "JANSALES": 3.0
  },

  {
    "date": "02-Jan-13",

    "JANSALES": 1.0
  },

  {
    "date": "03-Jan-13",

    "JANSALES": 3.0
  },

  {
    "date": "04-Jan-13",

    "JANSALES": 2.0
  },

  {
    "date": "05-Jan-13",

    "JANSALES": 2.0
  },

  {
    "date": "06-Jan-13",

    "JANSALES": 1.0
  },

  {
    "date": "07-Jan-13",

    "JANSALES": 2.0
  },

  {
    "date": "08-Jan-13",

    "JANSALES": 2.0
  },

  {
    "date": "09-Jan-13",

    "JANSALES": 3.0
  },

  {
    "date": "10-Jan-13",

    "JANSALES": 2.0
  },

  {
    "date": "11-Jan-13",

    "JANSALES": 3.0
  },

  {
    "date": "12-Jan-13",

    "JANSALES": 3.0
  },

  {
    "date": "13-Jan-13",

    "JANSALES": 2.0
  },

  {
    "date": "14-Jan-13",

    "JANSALES": 1.0
  }
];


var color = d3.scale.ordinal().range(["#004ecc", "#cc0000"]);
//d3.csv("data.csv", function(error, data) {
data1.forEach(function(d) {
  d.date = parseDate(d.date);
  d.XMAS = +d.XMAS;
  d.JANSALES = +d.JANSALES;
});

// Scale the range of the data


x.domain(d3.extent(data1, function(d) {
  return d.date;
}));
y.domain([0, 10]);

x2.domain(data1.map(function(d) {
  return d.date;
}));

//add the grid
chart1.append("g")
  .attr("class", "grid")
  .call(make_y_axis()
    .tickSize(-width, 0, 0)
    .tickFormat("")
  )

chart1.append("path")
  .attr("class", "line")
  .attr("stroke", "red")
  .attr("d", valueline(data1));

chart1.append("path")
  .attr("class", "line2")
  .attr("d", valueline2(data1.filter(function(d) {
    return d.date > parseDate("29-Dec-12");
  })));

// Add the X Axis
chart1.append("g")
  .attr("class", "x axis")
  .attr("transform", "translate(0," + height + ")")
  .call(xAxis);

// Add the Y Axis
chart1.append("g")
  .attr("class", "y axis")
  .call(yAxis);

chart1.append("text")
  .attr("transform", "translate(" + (width + 3) + "," + y(data1[0].JANSALES) + ")")
  .attr("x", ".1em")
  .attr("y", "-40")
  .attr("text-anchor", "start")
  .style("fill", "red")
  .style("font-size", "15")
  .style("font-weight", "bold")
  .text("JAN SALES");

chart1.append("text")
  .attr("transform", "translate(" + (width + 3) + "," + y(data1[0].XMAS) + ")")
  .attr("x", ".1em")
  .attr("y", "10")
  .attr("text-anchor", "start")
  .style("fill", "steelblue")
  .style("font-size", "15")
  .style("font-weight", "bold")
  .text("XMAS");

//plus 1: animation

var curtain = chart1.append('rect')
  .attr('x', -1 * width)
  .attr('y', -1 * height - 2)
  .attr('height', height)
  .attr('width', width)
  .attr('class', 'curtain')
  .attr('transform', 'rotate(180)')
  .style('fill', '#ffffff')

/* Optionally add a guideline */
var guideline = chart1.append('line')
  .attr('stroke', '#333')
  .attr('stroke-width', 0.4)
  .attr('class', 'guide')
  .attr('x1', 1)
  .attr('y1', 1)
  .attr('x2', 1)
  .attr('y2', height)

var t = chart1.transition()
  .delay(120)
  .duration(500)
  .ease('linear')
  .each('end', function() {
    d3.select('line.guide')
      .transition()
      .style('opacity', 0)
      .remove()
  });

t.select('rect.curtain')
  .attr('width', 0);
t.select('line.guide')
  .attr('transform', 'translate(' + width + ', 0)')

d3.select("#show_guideline").on("change", function(e) {


});


推荐答案

只需删除插入函数在这里:

var valueline = d3.svg.line()
    .interpolate("basis")
    .x(function(d) {
        return x(d.date);
    })
    .y(function(d) {
        return y(d.XMAS);
    });

并在 valueline2 中执行相同操作。现在你正在使用基础,这会创建一个 B-spline

And do the same in valueline2. Right now you're using basis, which creates a B-spline.

如果您想设置不同的插值,这里是D3 v3.x中可用选项的列表

In case you want to set a different interpolation, here is a list of available options in D3 v3.x.

以下是您更新的小提琴: https://jsfiddle.net/7apnhbqd/

Here is your updated fiddle: https://jsfiddle.net/7apnhbqd/

这篇关于折线图未在图表上触及正确的值且线条平滑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆