1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
# = Crimeam War deaths (Grouped bar)
# Florence Nightingale used a coxcomb diagram to emphasize the number of deaths due to “preventible or mitigable zymotic diseases”. This graph shows data using a stacked bar chart.
$:.unshift(File.dirname(__FILE__)+"/../../../lib")
require 'rubyvis'
require 'ostruct'
load(File.dirname(__FILE__)+"/crimea_data.rb")
w = 545
h = 280
#x = pv.Scale.linear($crimea, lambda {|d| d.date}).range(0, w)
x=pv.Scale.ordinal($crimea, lambda {|d| d.date}).split_banded(0,w,4/5.0)
y = pv.Scale.linear(0, 1500).range(0, h)
k=x.range_band / $causes.size
fill = pv.colors("lightpink", "darkgray", "lightblue")
format = pv.Format.date("%b")
vis = pv.Panel.new()
.width(w)
.height(h)
.margin(19.5)
.right(40);
panel = vis.add(pv.Panel)
.data($crimea)
.left(lambda {|d| x.scale(d.date)})
.width(x.range_band);
panel.add(pv.Bar)
.data($causes)
.bottom(0)
.width(k)
.left(lambda { self.index * k})
.height(lambda {|t, d| y.scale(d.send(t))})
.fill_style(lambda {|f| a=fill.scale(self.index); return a})
.stroke_style(lambda {|d| fill_style ? fill_style.darker : pv.color('black')})
.line_width(1);
panel.anchor("bottom").add(pv.Label)
.visible(lambda { (self.index % 3)==0})
.text_baseline("top")
.text_margin(10)
.text(lambda {|d| format.format(d.date)})
vis.add(pv.Rule)
.data(y.ticks())
.bottom(lambda {|d| y.scale(d)})
.stroke_style(lambda {|i| i!=0 ? pv.color("rgba(255, 255, 255, .5)") : pv.color("black")})
.anchor("right").add(pv.Label)
.visible(lambda { (self.index & 1)==0})
.text_margin(6);
vis.render();
puts vis.to_svg
|