我想用按钮创建一个图形

时间:2016-09-05 07:56:30

标签: javascript d3.js

我希望使用d3.js中的相同按钮显示并隐藏图形。 我使用d3.js来创建此图。我不知道我是否使用了类似的addlistener。 d3.js代码如下:

<style>

  #wrapper
  {
    min-width:960px;
    margin-left:auto;
    margin-right:auto;
  }
  #top
  {
    width: 100%;
    height: 40px;


  }

  .axis path,
  .axis line {
    fill: none;
    stroke: #000;
    shape-rendering: crispEdges;

  }

  .dot {
    stroke: #000;

  }
  div.tooltip {
    position: absolute; 
    text-align: center; 
    width: 60px;  
    height: 28px;   
    padding: 2px; 
    font: 12px sans-serif;  
    background: lightsteelblue; 
    border: 0px;          
    border-radius: 8px;
    /*  pointer-events: none; This line needs to be removed */

  }

</style>

<body>


  <script src="//d3js.org/d3.v3.min.js"></script>
  <script>

  var margin = {top: 20, right: 20, bottom: 30, left: 40},
  width = 1300 - margin.left - margin.right,
        height = 500 - margin.top - margin.bottom;

  var x = d3.scale.linear()
          .range([0, width]);

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

  var color = d3.scale.category10();

  var xAxis = d3.svg.axis()
          .scale(x)
          .orient("bottom");

  var yAxis = d3.svg.axis()
          .scale(y)
          .orient("left");
  var div = d3.select("body")
    .append("div")  // declare the tooltip div 
    .attr("class", "tooltip")              // apply the 'tooltip' class
    .style("opacity", 0);   

  var svg = (d3.select("body").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 + ")"));


  d3.json("/projects/chart/data", function (error, data) {
    if (error)
        throw error;

    data.forEach(function (d) {
        d.sepalLength = +d.sepalLength;
        d.sepalWidth = +d.sepalWidth;
    });

    x.domain(d3.extent(data, function (d) {
        return d.sepalWidth;
    })).nice();
    y.domain(d3.extent(data, function (d) {
        return d.sepalLength;
    })).nice();


    svg.append("g")
      .attr("class", "x axis")
      .attr("transform", "translate(0," + height + ")")
      .call(xAxis)
      .append("text")
      .attr("class", "label")
      .attr("x", width)
      .attr("y", -6)
      .style("text-anchor", "end")
      .text("Sepal Width (cm)");

    svg.append("g")
      .attr("class", "y axis")
      .call(yAxis)
      .append("text")
      .attr("class", "label")
      .attr("transform", "rotate(-90)")
      .attr("y", 6)
      .attr("dy", ".71em")
      .style("text-anchor", "end")
      .text("Sepal Length (cm)")

    svg.selectAll(".dot")
      .data(data)
      .enter().append("circle")
      .attr("class", "dot")
      .attr("r", 3.5)

      .attr("cx", function (d) {
          return x(d.sepalWidth);
      })
      .attr("cy", function (d) {
          return y(d.sepalLength);
      })
      .style("fill", function (d) {
          return color(d.species);
      })
        .on("mouseover", function (d) {
      div.transition()
        .duration(500)
        .style("opacity", 0);
      div.transition()
        .duration(200)
        .style("opacity", .9);
      div.html(
        '<a href= "http://homestead.app/process/'+d.sepalWidth+'">' + // The first <a> tag
        d.sepalWidth +
        "</a>" + // closing </a> tag
        "<br/>" + d.sepalLength)
        .style("left", (d3.event.pageX) + "px")
        .style("top", (d3.event.pageY - 28) + "px");
        });

        var legend = svg.selectAll(".legend")
          .data(color.domain())
          .enter().append("g")
          .attr("class", "legend")
          .attr("transform", function (d, i) {
              return "translate(0," + i * 20 + ")";
          });

        legend.append("rect")
          .attr("x", width - 18)
          .attr("width", 18)
          .attr("height", 18)
          .style("fill", color);

        legend.append("text")
          .attr("x", width - 24)
          .attr("y", 9)
          .attr("dy", ".35em")
          .style("text-anchor", "end")
          .text(function (d) {
            return d;
          });

        });

    </script>

如果可能,我想使用相同的按钮。

1 个答案:

答案 0 :(得分:1)

可行的快速示例:

HTML:

<button onclick='toggleGraph()'> </button>

JavaScript:

var showGraph = true;
function toggleGraph(){
  var graph = d3.select('#graph'); //i recommend giving the graph an ID
  if(showGraph){ //check bool
    graph.style('visibility', 'hidden'); //hide graph
    showGraph = false; //toggle bool
  } else {
    graph.style('visibility', 'visible'); //show graph
    showGraph = true; //toggle bool
  }
}
相关问题