2013-10-09 1 views
2

Как я могу рассказать D3, чтобы нажать новый график с новыми случайными данными, нажав кнопку, которую я создал? сейчас я получаю новые данные, обновляя страницу, но я хочу, чтобы можно было нажимать новый график без перезагрузки страницы.Я хочу обновить данные на этой гистограмме d3.js, нажав кнопку. (onclick)

</script> 
    var w = 500; 
    var h = 500; 
    var barPadding = 1; 

    var dataset = [ ]; 

    for (var i = 0; i < 14; i++) {var newNumber = Math.round(Math.random() * 70); 
    dataset.push(newNumber);} 



    var svg = d3.select("body") 
      .append("svg") 
      .attr("width", w) 
      .attr("height", h); 

    var widthScale = d3.scale.linear() 
        .domain([0, d3.max(dataset, function(d,i) {return d;})]) 
        .range([0,w]); 

     svg.selectAll("rect") 
      .data(dataset) 
      .enter() 
      .append("rect") 
      .attr("x", 3) 
      .attr("y", function (d,i) {return i* 36;}) 
      .attr("width", widthScale) 
      .transition() 
      .duration(1000) 
      .attr("height", h/dataset.length - barPadding) 
      .attr("fill", function(d) {return "rgb(0, 0, " + (d * 10) + ")";}); 

     svg.selectAll("text") 
      .data(dataset) 
      .enter() 
      .append("text") 
      .text(function(d) {return d;}) 
      .attr("x", function(d) {return widthScale(d) -17;}) 
      .attr("y", function(d,i) {return (i * 36) + 23 ;}) 
      .attr("fill", "white") 
      .attr("font-family", "sans-serif") 
      .attr("text-anchor", "middle"); 

+1

Вы видели [этот учебник] (http://www.d3noob.org/2013/02/update-d3js-data-dynamically-button.html)? –

ответ

2

Вам необходимо включить указать .update() и .exit() выделения. В идеале вы должны изменить свой код, чтобы он только вызывал .data(dataset).

var g = svg.selectAll("g") 
    .data(dataset); 

И тогда вы можете определить, что делать на .enter().update() и .exit(). Ваш .enter() s начнет g.enter().append('rect') и g.enter().append('text') соответственно. В то время как вам нужно будет работать с .update(), выход может быть таким же простым, как удаление объекта.

g.exit() 
    .remove(); 

Для большинства данных идентичность каждого элемента данных является значением индекса. Если это не так, то вам нужно будет убедиться, что вы предоставляете аксессор

.data(data, function(d) { return d.name; }) 

Я бы порекомендовал this tutorial on bar charts, который должен получить вас до скорости. Если это слишком продвинутый, попробуйте сначала part 1. Вы даже можете удалить требование, чтобы пользователь нажал кнопку для обновления.

+0

Я буду читать ссылки, которые вы разместили вместе с некоторой информацией о w3schools. Они все еще немного запутывают меня, так как я начинаю изучать программирование с нуля. Спасибо – Yansee

+0

Эти учебники и ответы предполагают разумный уровень понимания JavaScript. Если вы хотите получить максимальную отдачу от D3, я сначала рекомендую учебник по JavaScript. Типичными текстами для начинающих для языков являются «Сэм обучают JavaScript в течение 21 дня» и другие. Проверьте свои локальные библиотеки, найдите сайт для существующего вопроса об обучении JS и, возможно, обратитесь за помощью в [Stack Overflow Javacript Chatroom] (http://chat.stackoverflow.com/rooms/17/javascript). –

Смежные вопросы