繁体   English   中英

d3.js无法正确缩放,我的轴上显示的内容受到限制

[英]d3.js not scaling properly, there is a limit to what shows up on my axis

我正在尝试创建一个滑块,该滑块在从左向右滑动条时显示数据。 当我从右向左滑动时,我的数据不会显示。 其次,x轴缩放到的最大数字为9。我一直在处理我的数据,如果我将8用作x轴的最高值,则8将是最高值。 但是由于某些原因,我不能超过9。 即使我的所有数字都在9以下,也不会显示所有数据。

在我的数据中,我有两列。 一个称为“ ep”(用于x轴),另一个称为“ char”(用于y轴)。

关于如何使X轴正确缩放并显示数据的任何想法?

  <!DOCTYPE html>
<head>
  <meta charset="utf-8">
  <title>LD V6</title>
  <script src="https://d3js.org/d3.v4.min.js"></script>
  <style>
    body {
      font-family:"avenir next", Arial, sans-serif;
      font-size: 12px;
      color: #696969;
    }

    .ticks {
      font-size: 10px;
    }

    .track,
    .track-inset,
    .track-overlay {
      stroke-linecap: round;
    }

    .track {
      stroke: #000;
      stroke-opacity: 0.3;
      stroke-width: 10px;
    }

    .track-inset {
      stroke: #dcdcdc;
      stroke-width: 8px;
    }

    .track-overlay {
      pointer-events: stroke;
      stroke-width: 50px;
      stroke: transparent;
      cursor: crosshair;
    }

    .handle {
      fill: #fff;
      stroke: #000;
      stroke-opacity: 0.5;
      stroke-width: 1.25px;
    }



  </style>
</head>

<body>
<div id="vis">

</div>
<script>




var margin = {top:50, right:30, bottom:30, left:30},
    width = 960 - margin.left - margin.right,
    height = 600 - margin.top - margin.bottom;

var svg = d3.select("#vis")
    .append("svg")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom);  

////////// slider //////////

var moving = false;
var currentValue = 0;
var targetValue = 200;

var playButton = d3.select("#play-button");

var x = d3.scaleLinear().range([0, width])
    .clamp(true);

var y = d3.scaleLinear().range([height, 0]);

var slider = svg.append("g")
    .attr("class", "slider")
    .attr("transform", "translate(" + 50 + "," + (height) + ")");

slider.append("line")
    .attr("class", "track")
    .attr("x1", x.range()[0])
    .attr("x2", x.range()[1])
  .select(function() { return this.parentNode.appendChild(this.cloneNode(true)); })
    .attr("class", "track-inset")
  .select(function() { return this.parentNode.appendChild(this.cloneNode(true)); })
    .attr("class", "track-overlay")
    .call(d3.drag()
        .on("start.interrupt", function() { slider.interrupt(); })
        .on("start drag", function() {
          currentValue = d3.event.x;
          update(x.invert(currentValue)); 
        })
    );

//Attributes of the slider
slider.insert("g", ".track-overlay")
    .attr("class", "ticks")
    .attr("transform", "translate(0," + 18 + ")")
 /* .selectAll("text")
    .data(x.ticks(8))
    .enter()
    .append("text")
    .attr("x", x)
    .attr("y", 10)
    .attr("text-anchor", "middle")
    .text(function(d) { return d.ep); }); */

//Attributes of the slider handle   
var handle = slider.insert("circle", ".track-overlay")
    .attr("class", "handle")
    .attr("r", 8);

    /*
var label = slider.append("text")  
    .attr("class", "label")
    .attr("text-anchor", "middle")
    .text(formatDate(startDate))
    .attr("transform", "translate(0," + (-25) + ")")
    */

////////// plot //////////

var dataset;

var plot = svg.append("g")
    .attr("class", "plot")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

d3.csv("trial_v3.csv", prepare, function(data) {
  dataset = data;
  drawPlot(dataset);

  // scale the range of the data
  y.domain([0, d3.max(data, function(d) { return d.char; })]);
  x.domain([0, d3.max(data, function(d) { return d.ep; })]);

  // add the Y Axis
  svg.append("g")
    .call(d3.axisLeft(y))
    .attr("transform", "translate(" + 50 + ",0)");

  // add the X Axis
  svg.append("g")
    .call(d3.axisBottom(x))
    .attr("transform", "translate(" + 50 +"," + height + ")")

})


function prepare(d) {
  d.ep = d.ep;
  d.char = d.char;

  return d;

}



function drawPlot(data) {
  var locations = plot.selectAll(".location")
    .data(data);

  // if filtered dataset has more circles than already existing, transition new ones in
  locations.enter()
    .append("circle")
    .attr("class", "location")
    .attr("cx", function(d) { return x(d.ep); })
    .attr("cy", function(d){  return y(d.char)}) 
    .style("opacity", 0.5)
    .attr("r", 5)
      .transition()
      .duration(1200)
      .attr("r", 11
            );


  // if filtered dataset has less circles than already existing, remove excess
  locations.exit()
    .remove();

    }

function update(h) {
  // update position and text of label according to slider scale circle
  handle.attr("cx", x(h));
  /*label
    .attr("x", x(h))
    .text(formatDate(h)); */

  // filter data set and redraw plot
  var newData = dataset.filter(function(d) {
    return d.ep < h;
  })
  drawPlot(newData); 
};

/////////////////////////////////////////////////// SVG 2 /////////////////////////////////////////////
/*
var svg2 = d3.select("body")
    .append("svg")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom); 

    svg2.append("rect")
        .attr("width", 50)
        .attr("height",50)

*/  

</script>
</body>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM