2016-09-05 13 views
1

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> 

私はそれが可能だ場合は同じボタンを使用します。働くことができるものの

+0

?ボタンのJSはどこですか? –

答えて

1

クイック例:

HTML:

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

はJavaScript:

ボタンでHTMLで
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 
    } 
} 
関連する問題