Search code examples
coffeescriptrickshawdashing

Rickshaw Stacked Multi-graph


I am working with this multi-graph Dashing widget. It works correctly, but it uses only two data series and I want to add one more. I have modified the .coffee file to

    class Dashing.Mgraph extends Dashing.Widget
 
  @accessor 'current', ->
    return @get('displayedValue') if @get('displayedValue')
    points = @get('points')
    if points
      points[0][points[0].length - 1].y + ' / ' + points[1][points[1].length - 1].y ' / ' + points[2][points[2].length - 1].y
 
  ready: ->
    container = $(@node).parent()
    # Gross hacks. Let's fix this.
    width = (Dashing.widget_base_dimensions[0] * container.data("sizex")) + Dashing.widget_margins[0] * 2 * (container.data("sizex") - 1)
    height = (Dashing.widget_base_dimensions[1] * container.data("sizey"))
    @graph = new Rickshaw.Graph(
      element: @node
      width: width
      height: height
      renderer: 'area'
      stroke: false
      series: [
        {
        color: "#fff",
        data: [{x:0, y:0}]
        },
        {
            color: "#222",
            data: [{x:0, y:0}]
        },
        {
            color: "#333",
            data: [{x:0, y:0}]
        }
      ]
    )
 
    @graph.series[0].data = @get('points') if @get('points')
 
    x_axis = new Rickshaw.Graph.Axis.Time(graph: @graph)
    y_axis = new Rickshaw.Graph.Axis.Y(graph: @graph, tickFormat: Rickshaw.Fixtures.Number.formatKMBT)
    @graph.renderer.unstack = true
    @graph.render()
 
  onData: (data) ->
    if @graph
      @graph.series[0].data = data.points[0]
      @graph.series[1].data = data.points[1]
      @graph.series[2].data = data.points[2]
      @graph.render()

However, when I run dashing, nothing it displayed (not even my other widgets). It is just a blank screen. Can anyone tell me what is going on here?

EDIT:

I have isolated the problem more. It seems that everything works until I add the third data series in series: It seems to be this that causes it to not work.


Solution

  • Here, try using rickshawgraph widget https://gist.github.com/jwalton/6614023

    Here is my .rb

    points1 = []
    points2 = []
    points3 = []
    (1..10).each do |i|
      points1 << { x: i, y: 10 }
      points2 << { x: i, y: 10 }
      points3 << { x: i, y: 10 }
    end
    last_x = points1.last[:x]
    
    SCHEDULER.every '2s' do
      points1.shift
      points2.shift
      points3.shift
      last_x += 1
      points1 << { x: last_x, y: rand(50) }
      points2 << { x: last_x, y: rand(10) }
      points3 << { x: last_x, y: rand(100) }
    
      series = [
            {
              name: "set1",
              data: points1
            },
            {
              name: "set2",
              data: points2
            },
            {
              name: "set3",
              data: points3
            }
           ]
       send_event('convergence', series: series)
    end
    

    Here is my .erb

    % content_for :title do %>My super sweet dashboard<% end %>
    <div class="gridster">
    <ul>
        <li data-row="1" data-col="1" data-sizex="2" data-sizey="1">
        <div data-id="convergence" data-view="Rickshawgraph" data-title="Convergence" data-unstack="true" data-stroke="true" data-default-alpha="0.5" data-color-scheme="compliment" data-legend="true" data-summary-method="last"></div>
        </li>
    </ul>
    </div>