Skip to content

Instantly share code, notes, and snippets.

@zuhao
Last active December 23, 2015 16:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zuhao/6664828 to your computer and use it in GitHub Desktop.
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