Skip to content

Instantly share code, notes, and snippets.

@translunar
Created April 18, 2014 16:38
Show Gist options
  • Select an option

  • Save translunar/11053241 to your computer and use it in GitHub Desktop.

Select an option

Save translunar/11053241 to your computer and use it in GitHub Desktop.
Plotrb grouped bar
require 'plotrb'
data = pdata.name('table').values(
[
{category: :A, position: 0, value: 0.1},
{category: :A, position: 1, value: 0.6},
{category: :A, position: 2, value: 0.9},
{category: :A, position: 3, value: 0.4},
{category: :B, position: 0, value: 0.7},
{category: :B, position: 1, value: 0.2},
{category: :B, position: 2, value: 1.1},
{category: :B, position: 3, value: 0.8},
{category: :C, position: 0, value: 0.6},
{category: :C, position: 1, value: 0.1},
{category: :C, position: 2, value: 0.2},
{category: :C, position: 3, value: 0.7}
]
)
category = pdata.name('category').source('table').transform [facet_transform.keys(:category)]
xs = linear_scale.name('val').from('table.value').nicely.to_width
gs = ordinal_scale.name('cat').from('category.key').padding(0.2).to_height
cs = ordinal_scale.name('color').to_colors
ys = ordinal_scale.name('pos').from('table.position').to_height
rm = rect_mark.from(data) do
enter do
y_start { scale(ys).field(:position) }
height { scale(ys).use_band }
x_start { scale(xs).field(:value) }
x_end { scale(xs).value(0) }
fill { scale(cs).field(:position) }
end
end
tm = text_mark.from(data) do
enter do
y { scale(ys).field(:position) }
dy { scale(ys).mult(0.5).use_band }
x { scale(xs).field(:value).offset(-4) }
text { scale(xs).field(:value) }
fill :white
align :right
baseline :middle
end
end
mark = group_mark.from(category) do
scales gs
axes y_axis.scale(gs).tick_size(0).tick_padding(8)
marks rm, tm
enter do
y { scale(gs).field(:key) }
height { scale(gs).use_band }
end
end
vis = visualization.width(300).height(240) do
data data, category
scales gs, cs, xs, ys
marks mark
axes x_axis.scale(xs), y_axis.scale(ys)
end
puts vis.generate_spec(:pretty)
$ ruby grouped_bar.rb
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/kernel.rb:117:in `method_missing': undefined method `to' for #<Plotrb::Mark:0x007ffb249d2958> (NoMethodError)
from grouped_bar.rb:37:in `<main>'
Johns-MacBook-Air-2:examples jwoods$ ruby grouped_bar.rb
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/transforms.rb:586:in `get_full_field_ref': Invalid data field (ArgumentError)
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/transforms.rb:460:in `block in process_facet_keys'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/transforms.rb:460:in `collect!'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/transforms.rb:460:in `process_facet_keys'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/transforms.rb:409:in `attribute_post_processing'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:65:in `collect_attributes'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:75:in `block (2 levels) in collect_attributes'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:74:in `collect'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:74:in `block in collect_attributes'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:67:in `each'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:67:in `collect_attributes'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:75:in `block (2 levels) in collect_attributes'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:74:in `collect'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:74:in `block in collect_attributes'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:67:in `each'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:67:in `collect_attributes'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/visualization.rb:41:in `generate_spec'
from grouped_bar.rb:66:in `<main>'
Johns-MacBook-Air-2:examples jwoods$ ruby grouped_bar.rb
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/transforms.rb:586:in `get_full_field_ref': Invalid data field (ArgumentError)
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/transforms.rb:460:in `block in process_facet_keys'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/transforms.rb:460:in `collect!'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/transforms.rb:460:in `process_facet_keys'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/transforms.rb:409:in `attribute_post_processing'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:65:in `collect_attributes'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:75:in `block (2 levels) in collect_attributes'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:74:in `collect'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:74:in `block in collect_attributes'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:67:in `each'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:67:in `collect_attributes'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:75:in `block (2 levels) in collect_attributes'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:74:in `collect'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:74:in `block in collect_attributes'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:67:in `each'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/base.rb:67:in `collect_attributes'
from /usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/plotrb-0.0.1/lib/plotrb/visualization.rb:41:in `generate_spec'
from grouped_bar.rb:66:in `<main>'
@zuhao
Copy link

zuhao commented Apr 18, 2014

Hi John. I think it might be the problem with the facet keys.

A field reference in Plotrb currently does not support symbols. Try facet_transform.keys('category') instead; or facet_transform.keys('data.category'), they should produce the same output.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment