This treemap represents farm explotations on Biobío province, Chile.
Colors represent different ‘comunas’ and bar inside one color
represent different types of explotation
require 'rubyvis' load(File.dirname(__FILE__)+"/censo_agropecuario_chile_data.rb") w = 500 h = 500 max_s=30 c_p_c={} te = { 1=>"Explotación agropecuaria con actividad", 2=>"Explotación forestal", 3=>"Explotación agropecuaria sin tierra", 4=>"Explotación agropecuaria temporalmente sin actividad", 5=>"Parques nacionales y reservas forestales"} number=Rubyvis::Format.number color=Rubyvis::Colors.category20 $censo.each_with_index do |c,i| c_p_c[c[:glosa]]||=Hash.new c_p_c[c[:glosa]][c[:te]]=OpenStruct.new(c) end nodes = pv.dom(c_p_c).root("censo").nodes # The root panel. vis = pv.Panel.new() .width(w) .height(h) .bottom(20) .left(30) .right(10) .top(5); treemap = vis.add(Rubyvis::Layout::Treemap). nodes(nodes).mode("squarify").round(true). size(lambda {|d| d.node_value.superficie}) treemap.leaf.add(Rubyvis::Panel). fill_style(lambda{|d| color.scale(d.node_value.glosa)}). stroke_style("#fff"). line_width(1). antialias(false). title(lambda {|d| d.parent_node ? d.node_value.glosa+"-#{te[d.node_value.te]}" : ""}) treemap.node_label.add(Rubyvis::Label). text_style(lambda {|d| pv.rgb(0, 0, 0, 1)}). visible(lambda {|d| d.node_value and d.node_value.superficie>200}). text(lambda {|d| number.format(d.node_value.superficie.to_i)}) vis.render() puts vis.to_svg