Skip to content

Instantly share code, notes, and snippets.

@zuhao
Last active December 23, 2015 16:49
    Show Gist options
    • Select an option

    • Save zuhao/6664828 to your computer and use it in GitHub Desktop.

    Select an option

    Save zuhao/6664828 to your computer and use it in GitHub Desktop.
    Plotrb Exmaple: Barley

    This example is taken from Vega's gallery

    The following is the Ruby code that generates barley.json.

    require 'plotrb'
    
    raw_data = pdata.name('barley').url('barley_data.json')
    variety = pdata.name('variety').source('barley').transform [
      facet_transform.keys('variety'),
    	stats_transform.value('yield').median,
    	sort_transform.by('-median')
    ]
    site = pdata.name('site').source('barley').transform [
    	facet_transform.keys('site'),
    	stats_transform.value('yield').median,
    	sort_transform.by('-median')
    ]
    
    gs = ordinal_scale.name('g').padding(0.15).from('site.key').to_height
    xs = linear_scale.name('x').from('barley.yield').to_width.nicely
    cs = ordinal_scale.name('c').to_colors
    ys = ordinal_scale.name('y').from('variety.key').to_height.as_points.padding(1.2)
    xaxis = x_axis.scale(xs).offset(-12)
    yaxis = y_axis.scale(ys).tick_size(0) do
      properties(:axis) { stroke :transparent }
    end
    
    
    tm = text_mark.from(site) do
      enter do
        x { group(:width).times(0.5) }
        y { scale(gs).field(:key).offset(-2) }
        font_weight :bold
        text { field(:key) }
        align :center
        baseline :bottom
        fill '#000'
      end
    end
    
    sm = symbol_mark.enter do
      x { scale(xs).field('yield') }
      y { scale(ys).field('variety') }
      size 50
      stroke { scale(cs).field('year') }
      stroke_width 2
    end
    
    gm = group_mark.from(site) do
      scales ys
      axes yaxis
      marks sm
      enter do
        x 0.5
        y { scale(gs).field(:key) }
        height { scale(gs).use_band }
        width { group(:width) }
        stroke '#ccc'
      end
    end
    
    vis = visualization.width(200).height(720) do
      data raw_data, variety, site
      scales gs, cs, xs, ys
      axes xaxis
      marks tm, gm
    end
    
    puts vis.generate_spec(:pretty)
    {
    "width": 200,
    "height": 720,
    "data": [
    {
    "name": "barley",
    "url": "barley_data.json"
    },
    {
    "name": "variety",
    "source": "barley",
    "transform": [
    {
    "keys": [
    "data.variety"
    ],
    "type": "facet"
    },
    {
    "value": "data.yield",
    "median": true,
    "type": "stats"
    },
    {
    "by": [
    "-median"
    ],
    "type": "sort"
    }
    ]
    },
    {
    "name": "site",
    "source": "barley",
    "transform": [
    {
    "keys": [
    "data.site"
    ],
    "type": "facet"
    },
    {
    "value": "data.yield",
    "median": true,
    "type": "stats"
    },
    {
    "by": [
    "-median"
    ],
    "type": "sort"
    }
    ]
    }
    ],
    "scales": [
    {
    "padding": 0.15,
    "name": "g",
    "type": "ordinal",
    "domain": {
    "data": "site",
    "field": "key"
    },
    "range": "height"
    },
    {
    "name": "c",
    "type": "ordinal",
    "range": "category10"
    },
    {
    "nice": true,
    "name": "x",
    "type": "linear",
    "domain": {
    "data": "barley",
    "field": "data.yield"
    },
    "range": "width"
    },
    {
    "points": true,
    "padding": 1.2,
    "name": "y",
    "type": "ordinal",
    "domain": {
    "data": "variety",
    "field": "key"
    },
    "range": "height"
    }
    ],
    "marks": [
    {
    "type": "text",
    "from": {
    "data": "site"
    },
    "properties": {
    "enter": {
    "text": {
    "field": "key"
    },
    "align": {
    "value": "center"
    },
    "baseline": {
    "value": "bottom"
    },
    "fontWeight": {
    "value": "bold"
    },
    "x": {
    "mult": 0.5,
    "group": "width"
    },
    "y": {
    "field": "key",
    "scale": "g",
    "offset": -2
    },
    "fill": {
    "value": "#000"
    }
    }
    }
    },
    {
    "scales": [
    {
    "points": true,
    "padding": 1.2,
    "name": "y",
    "type": "ordinal",
    "domain": {
    "data": "variety",
    "field": "key"
    },
    "range": "height"
    }
    ],
    "axes": [
    {
    "type": "y",
    "scale": "y",
    "tickSize": 0,
    "properties": {
    "axis": {
    "stroke": {
    "value": "transparent"
    }
    }
    }
    }
    ],
    "marks": [
    {
    "type": "symbol",
    "properties": {
    "enter": {
    "size": {
    "value": 50
    },
    "x": {
    "field": "data.yield",
    "scale": "x"
    },
    "y": {
    "field": "data.variety",
    "scale": "y"
    },
    "stroke": {
    "field": "data.year",
    "scale": "c"
    },
    "strokeWidth": {
    "value": 2
    }
    }
    }
    }
    ],
    "type": "group",
    "from": {
    "data": "site"
    },
    "properties": {
    "enter": {
    "x": {
    "value": 0.5
    },
    "width": {
    "group": "width"
    },
    "y": {
    "field": "key",
    "scale": "g"
    },
    "height": {
    "scale": "g",
    "band": true
    },
    "stroke": {
    "value": "#ccc"
    }
    }
    }
    }
    ],
    "axes": [
    {
    "type": "x",
    "scale": "x",
    "offset": -12
    }
    ]
    }
    require './lib/plotrb.rb'
    raw_data = pdata.name('barley').url('barley_data.json')
    variety = pdata.name('variety').source('barley').transform [
    facet_transform.keys('variety'),
    stats_transform.value('yield').median,
    sort_transform.by('-median')
    ]
    site = pdata.name('site').source('barley').transform [
    facet_transform.keys('site'),
    stats_transform.value('yield').median,
    sort_transform.by('-median')
    ]
    gs = ordinal_scale.name('g').padding(0.15).from('site.key').to_height
    xs = linear_scale.name('x').from('barley.yield').to_width.nicely
    cs = ordinal_scale.name('c').to_colors
    ys = ordinal_scale.name('y').from('variety.key').to_height.as_points.padding(1.2)
    xaxis = x_axis.scale(xs).offset(-12)
    yaxis = y_axis.scale(ys).tick_size(0) do
    properties(:axis) { stroke :transparent }
    end
    tm = text_mark.from(site) do
    enter do
    x { group(:width).times(0.5) }
    y { scale(gs).field(:key).offset(-2) }
    font_weight :bold
    text { field(:key) }
    align :center
    baseline :bottom
    fill '#000'
    end
    end
    sm = symbol_mark.enter do
    x { scale(xs).field('yield') }
    y { scale(ys).field('variety') }
    size 50
    stroke { scale(cs).field('year') }
    stroke_width 2
    end
    gm = group_mark.from(site) do
    scales ys
    axes yaxis
    marks sm
    enter do
    x 0.5
    y { scale(gs).field(:key) }
    height { scale(gs).use_band }
    width { group(:width) }
    stroke '#ccc'
    end
    end
    vis = visualization.width(200).height(720) do
    data raw_data, variety, site
    scales gs, cs, xs, ys
    axes xaxis
    marks tm, gm
    end
    puts vis.generate_spec(:pretty)
    [{"yield":27,"variety":"Manchuria","year":1931,"site":"University Farm"},
    {"yield":48.86667,"variety":"Manchuria","year":1931,"site":"Waseca"},
    {"yield":27.43334,"variety":"Manchuria","year":1931,"site":"Morris"},
    {"yield":39.93333,"variety":"Manchuria","year":1931,"site":"Crookston"},
    {"yield":32.96667,"variety":"Manchuria","year":1931,"site":"Grand Rapids"},
    {"yield":28.96667,"variety":"Manchuria","year":1931,"site":"Duluth"},
    {"yield":43.06666,"variety":"Glabron","year":1931,"site":"University Farm"},
    {"yield":55.2,"variety":"Glabron","year":1931,"site":"Waseca"},
    {"yield":28.76667,"variety":"Glabron","year":1931,"site":"Morris"},
    {"yield":38.13333,"variety":"Glabron","year":1931,"site":"Crookston"},
    {"yield":29.13333,"variety":"Glabron","year":1931,"site":"Grand Rapids"},
    {"yield":29.66667,"variety":"Glabron","year":1931,"site":"Duluth"},
    {"yield":35.13333,"variety":"Svansota","year":1931,"site":"University Farm"},
    {"yield":47.33333,"variety":"Svansota","year":1931,"site":"Waseca"},
    {"yield":25.76667,"variety":"Svansota","year":1931,"site":"Morris"},
    {"yield":40.46667,"variety":"Svansota","year":1931,"site":"Crookston"},
    {"yield":29.66667,"variety":"Svansota","year":1931,"site":"Grand Rapids"},
    {"yield":25.7,"variety":"Svansota","year":1931,"site":"Duluth"},
    {"yield":39.9,"variety":"Velvet","year":1931,"site":"University Farm"},
    {"yield":50.23333,"variety":"Velvet","year":1931,"site":"Waseca"},
    {"yield":26.13333,"variety":"Velvet","year":1931,"site":"Morris"},
    {"yield":41.33333,"variety":"Velvet","year":1931,"site":"Crookston"},
    {"yield":23.03333,"variety":"Velvet","year":1931,"site":"Grand Rapids"},
    {"yield":26.3,"variety":"Velvet","year":1931,"site":"Duluth"},
    {"yield":36.56666,"variety":"Trebi","year":1931,"site":"University Farm"},
    {"yield":63.8333,"variety":"Trebi","year":1931,"site":"Waseca"},
    {"yield":43.76667,"variety":"Trebi","year":1931,"site":"Morris"},
    {"yield":46.93333,"variety":"Trebi","year":1931,"site":"Crookston"},
    {"yield":29.76667,"variety":"Trebi","year":1931,"site":"Grand Rapids"},
    {"yield":33.93333,"variety":"Trebi","year":1931,"site":"Duluth"},
    {"yield":43.26667,"variety":"No. 457","year":1931,"site":"University Farm"},
    {"yield":58.1,"variety":"No. 457","year":1931,"site":"Waseca"},
    {"yield":28.7,"variety":"No. 457","year":1931,"site":"Morris"},
    {"yield":45.66667,"variety":"No. 457","year":1931,"site":"Crookston"},
    {"yield":32.16667,"variety":"No. 457","year":1931,"site":"Grand Rapids"},
    {"yield":33.6,"variety":"No. 457","year":1931,"site":"Duluth"},
    {"yield":36.6,"variety":"No. 462","year":1931,"site":"University Farm"},
    {"yield":65.7667,"variety":"No. 462","year":1931,"site":"Waseca"},
    {"yield":30.36667,"variety":"No. 462","year":1931,"site":"Morris"},
    {"yield":48.56666,"variety":"No. 462","year":1931,"site":"Crookston"},
    {"yield":24.93334,"variety":"No. 462","year":1931,"site":"Grand Rapids"},
    {"yield":28.1,"variety":"No. 462","year":1931,"site":"Duluth"},
    {"yield":32.76667,"variety":"Peatland","year":1931,"site":"University Farm"},
    {"yield":48.56666,"variety":"Peatland","year":1931,"site":"Waseca"},
    {"yield":29.86667,"variety":"Peatland","year":1931,"site":"Morris"},
    {"yield":41.6,"variety":"Peatland","year":1931,"site":"Crookston"},
    {"yield":34.7,"variety":"Peatland","year":1931,"site":"Grand Rapids"},
    {"yield":32,"variety":"Peatland","year":1931,"site":"Duluth"},
    {"yield":24.66667,"variety":"No. 475","year":1931,"site":"University Farm"},
    {"yield":46.76667,"variety":"No. 475","year":1931,"site":"Waseca"},
    {"yield":22.6,"variety":"No. 475","year":1931,"site":"Morris"},
    {"yield":44.1,"variety":"No. 475","year":1931,"site":"Crookston"},
    {"yield":19.7,"variety":"No. 475","year":1931,"site":"Grand Rapids"},
    {"yield":33.06666,"variety":"No. 475","year":1931,"site":"Duluth"},
    {"yield":39.3,"variety":"Wisconsin No. 38","year":1931,"site":"University Farm"},
    {"yield":58.8,"variety":"Wisconsin No. 38","year":1931,"site":"Waseca"},
    {"yield":29.46667,"variety":"Wisconsin No. 38","year":1931,"site":"Morris"},
    {"yield":49.86667,"variety":"Wisconsin No. 38","year":1931,"site":"Crookston"},
    {"yield":34.46667,"variety":"Wisconsin No. 38","year":1931,"site":"Grand Rapids"},
    {"yield":31.6,"variety":"Wisconsin No. 38","year":1931,"site":"Duluth"},
    {"yield":26.9,"variety":"Manchuria","year":1932,"site":"University Farm"},
    {"yield":33.46667,"variety":"Manchuria","year":1932,"site":"Waseca"},
    {"yield":34.36666,"variety":"Manchuria","year":1932,"site":"Morris"},
    {"yield":32.96667,"variety":"Manchuria","year":1932,"site":"Crookston"},
    {"yield":22.13333,"variety":"Manchuria","year":1932,"site":"Grand Rapids"},
    {"yield":22.56667,"variety":"Manchuria","year":1932,"site":"Duluth"},
    {"yield":36.8,"variety":"Glabron","year":1932,"site":"University Farm"},
    {"yield":37.73333,"variety":"Glabron","year":1932,"site":"Waseca"},
    {"yield":35.13333,"variety":"Glabron","year":1932,"site":"Morris"},
    {"yield":26.16667,"variety":"Glabron","year":1932,"site":"Crookston"},
    {"yield":14.43333,"variety":"Glabron","year":1932,"site":"Grand Rapids"},
    {"yield":25.86667,"variety":"Glabron","year":1932,"site":"Duluth"},
    {"yield":27.43334,"variety":"Svansota","year":1932,"site":"University Farm"},
    {"yield":38.5,"variety":"Svansota","year":1932,"site":"Waseca"},
    {"yield":35.03333,"variety":"Svansota","year":1932,"site":"Morris"},
    {"yield":20.63333,"variety":"Svansota","year":1932,"site":"Crookston"},
    {"yield":16.63333,"variety":"Svansota","year":1932,"site":"Grand Rapids"},
    {"yield":22.23333,"variety":"Svansota","year":1932,"site":"Duluth"},
    {"yield":26.8,"variety":"Velvet","year":1932,"site":"University Farm"},
    {"yield":37.4,"variety":"Velvet","year":1932,"site":"Waseca"},
    {"yield":38.83333,"variety":"Velvet","year":1932,"site":"Morris"},
    {"yield":32.06666,"variety":"Velvet","year":1932,"site":"Crookston"},
    {"yield":32.23333,"variety":"Velvet","year":1932,"site":"Grand Rapids"},
    {"yield":22.46667,"variety":"Velvet","year":1932,"site":"Duluth"},
    {"yield":29.06667,"variety":"Trebi","year":1932,"site":"University Farm"},
    {"yield":49.2333,"variety":"Trebi","year":1932,"site":"Waseca"},
    {"yield":46.63333,"variety":"Trebi","year":1932,"site":"Morris"},
    {"yield":41.83333,"variety":"Trebi","year":1932,"site":"Crookston"},
    {"yield":20.63333,"variety":"Trebi","year":1932,"site":"Grand Rapids"},
    {"yield":30.6,"variety":"Trebi","year":1932,"site":"Duluth"},
    {"yield":26.43334,"variety":"No. 457","year":1932,"site":"University Farm"},
    {"yield":42.2,"variety":"No. 457","year":1932,"site":"Waseca"},
    {"yield":43.53334,"variety":"No. 457","year":1932,"site":"Morris"},
    {"yield":34.33333,"variety":"No. 457","year":1932,"site":"Crookston"},
    {"yield":19.46667,"variety":"No. 457","year":1932,"site":"Grand Rapids"},
    {"yield":22.7,"variety":"No. 457","year":1932,"site":"Duluth"},
    {"yield":25.56667,"variety":"No. 462","year":1932,"site":"University Farm"},
    {"yield":44.7,"variety":"No. 462","year":1932,"site":"Waseca"},
    {"yield":47,"variety":"No. 462","year":1932,"site":"Morris"},
    {"yield":30.53333,"variety":"No. 462","year":1932,"site":"Crookston"},
    {"yield":19.9,"variety":"No. 462","year":1932,"site":"Grand Rapids"},
    {"yield":22.5,"variety":"No. 462","year":1932,"site":"Duluth"},
    {"yield":28.06667,"variety":"Peatland","year":1932,"site":"University Farm"},
    {"yield":36.03333,"variety":"Peatland","year":1932,"site":"Waseca"},
    {"yield":43.2,"variety":"Peatland","year":1932,"site":"Morris"},
    {"yield":25.23333,"variety":"Peatland","year":1932,"site":"Crookston"},
    {"yield":26.76667,"variety":"Peatland","year":1932,"site":"Grand Rapids"},
    {"yield":31.36667,"variety":"Peatland","year":1932,"site":"Duluth"},
    {"yield":30,"variety":"No. 475","year":1932,"site":"University Farm"},
    {"yield":41.26667,"variety":"No. 475","year":1932,"site":"Waseca"},
    {"yield":44.23333,"variety":"No. 475","year":1932,"site":"Morris"},
    {"yield":32.13333,"variety":"No. 475","year":1932,"site":"Crookston"},
    {"yield":15.23333,"variety":"No. 475","year":1932,"site":"Grand Rapids"},
    {"yield":27.36667,"variety":"No. 475","year":1932,"site":"Duluth"},
    {"yield":38,"variety":"Wisconsin No. 38","year":1932,"site":"University Farm"},
    {"yield":58.16667,"variety":"Wisconsin No. 38","year":1932,"site":"Waseca"},
    {"yield":47.16667,"variety":"Wisconsin No. 38","year":1932,"site":"Morris"},
    {"yield":35.9,"variety":"Wisconsin No. 38","year":1932,"site":"Crookston"},
    {"yield":20.66667,"variety":"Wisconsin No. 38","year":1932,"site":"Grand Rapids"},
    {"yield":29.33333,"variety":"Wisconsin No. 38","year":1932,"site":"Duluth"}]
    <html>
    <head>
    <title>Plotrb Example: Barley</title>
    <script src="http://d3js.org/d3.v3.min.js"></script>
    <script src="http://trifacta.github.com/vega/vega.js"></script>
    </head>
    <body>
    <div id="vis"></div>
    </body>
    <script type="text/javascript">
    // parse a spec and create a visualization view
    function parse(spec) {
    vg.parse.spec(spec, function(chart) { chart({el:"#vis", renderer:'svg'}).update(); });
    }
    parse("barley.json");
    </script>
    </html>
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment