Update graph in real time from server

Posted by user1869421 on Stack Overflow See other posts from Stack Overflow or by user1869421
Published on 2012-12-08T23:01:46Z Indexed on 2012/12/08 23:03 UTC
Read the original article Hit count: 231

I'm trying to update a graph with received data, so that the height of the bars increase as more data is received from the server via a websocket. But my code doesn't render a graph in the browser and plot the data points. I cannot see anything wrong with the code. I really need some help here please.

  ws = new WebSocket("ws://localhost:8888/dh");

  var useData = []
  //var chart;

  var chart = d3.select("body")
     .append("svg:svg")
     .attr("class", "chart")
     .attr("width", 420)
     .attr("height", 200);


  ws.onmessage = function(evt)
  {  
    var distances = JSON.parse(evt.data);
    data  = distances.miles;
    console.log(data);

    if(useData.length <= 10){
      useData.push(data)
    }
    else
    {

       var draw = function(data){        
       // Set the width relative to max data value
       var x = d3.scale.linear()
        .domain([0, d3.max(useData)])
        .range([0, 420]);

       var y = d3.scale.ordinal()
        .domain(useData)
        .rangeBands([0, 120]);

       var rect = chart.selectAll("rect")
        .data(useData)

        // enter rect
        rect.enter().append("svg:rect")
            .attr("y", y)
            .attr("width", x)
            .attr("height", y.rangeBand());

        // update rect            
        rect
            .attr("y", y)
            .attr("width", x)
            .attr("height", y.rangeBand());

       var text = chart.selectAll("text")
            .data(useData)

       // enter text
       text.enter().append("svg:text")
            .attr("x", x)
            .attr("y", function (d) { return y(d) + y.rangeBand() / 2; })
            .attr("dx", -3) // padding-right
            .attr("dy", ".35em") // vertical-align: middle
            .attr("text-anchor", "end") // text-align: right
            .text(String);

        // update text
        text
            .data(useData)
            .attr("x", x)
            .text(String);
    }
useData.length = 0;
   }          
}                 

Thanks

© Stack Overflow or respective owner

Related posts about JavaScript

Related posts about jQuery