barcharts gem - print barcharts in your terminal in ascii or with unicode block elements

Usage

Use the barchart method to print barcharts. Let's use the "Q: Where do Rubyists come from / What are the top countries for blogs?" example from the Planet Ruby page:

require 'barchart'

data = [
  ['Australia',     3],
  ['Austria',       1],
  ['Canada',        1],
  ['Croatia',       1],
  ['India',         1],
  ['Poland',        2],
  ['Spain',         1],
  ['Switzerland',   1],
  ['Ukraine',       1],
  ['United States', 6],
]

# -or-

data = {
  'Australia':     3,
  'Austria':       1,
  'Canada':        1,
  'Croatia':       1,
  'India':         1,
  'Poland':        2,
  'Spain':         1,
  'Switzerland':   1,
  'Ukraine':       1,
  'United States': 6,
}

puts barchart( data, title: 'Location', chars: '*' )

Resulting in:

Location  (n=18)
---------------------------------
  Australia      (16%) | ******** 3
  Austria        ( 5%) | ** 1
  Canada         ( 5%) | ** 1
  Croatia        ( 5%) | ** 1
  India          ( 5%) | ** 1
  Poland         (11%) | ***** 2
  Spain          ( 5%) | ** 1
  Switzerland    ( 5%) | ** 1
  Ukraine        ( 5%) | ** 1
  United States  (33%) | **************** 6

or using Unicode block elements:

puts barchart( data, title: 'Location', chars: '▏▎▍▋▊▉' )

Resulting in:

Location  (n=18)
---------------------------------
  Australia      (16%) | ▉▉▉▉▉▉▉▉▍ 3
  Austria        ( 5%) | ▉▉▊ 1
  Canada         ( 5%) | ▉▉▊ 1
  Croatia        ( 5%) | ▉▉▊ 1
  India          ( 5%) | ▉▉▊ 1
  Poland         (11%) | ▉▉▉▉▉▋ 2
  Spain          ( 5%) | ▉▉▊ 1
  Switzerland    ( 5%) | ▉▉▊ 1
  Ukraine        ( 5%) | ▉▉▊ 1
  United States  (33%) | ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▊ 6

Aside: What are Unicode block elements?

Unicode among other block elements defines:

  • - U+258F - Left one eighth block
  • - U+258E - Left one quarter block
  • - U+258D - Left three eighths block
  • - U+258B - Left five eighths block
  • - U+258A - Left three quarters block
  • - U+2589 - Left seven eighths block

See Block Elements @ Wikipedia for more.

Barchart Options - sort: true|false, n: <sample size>

Pass in sort: true to reverse sort the dataset (highest values first). Let's use the "Q: What (web site) publishing tools are in use?" example:

data = [
  ['Webgen',      1],
  ['Jekyll',     12],
  ['WordPress',   3],
  ['Hugo',        1],
  ['Ghost',       2],
  ['Transistor',  1],
  ['Simplecast',  1],
  ['?',          30],
]

puts barchart( data, title: 'Generators', sort: true )

Resulting in:

Generators  (n=51)
---------------------------------
  ?           (58%) | ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▍ 30
  Jekyll      (23%) | ▉▉▉▉▉▉▉▉▉▉▉▊ 12
  WordPress   ( 5%) | ▉▉▉ 3
  Ghost       ( 3%) | ▉▉ 2
  Hugo        ( 1%) | ▉ 1
  Transistor  ( 1%) | ▉ 1
  Simplecast  ( 1%) | ▉ 1
  Webgen      ( 1%) | ▉ 1

Pass in n: <sample size> to use a "custom" sample size AND to turn off the auto-calculation of the usage percentage. Let's use the "Q: What are the top topics / words in headlines?" example:

data = [
  ['rails',       13],
  ['ruby',        12],
  ['conferences',  6],
  ['dry',          5],
  ['rom',          4],
  ['ml',           2],
]

puts barchart( data, title: 'Top Words in Headlines 2020', n: 47)

resulting in:

Top Words in Headlines 2020  (n=47)
---------------------------------
  rails        | ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▍ 13
  ruby         | ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▎ 12
  conferences  | ▉▉▉▉▉▉▉▏ 6
  dry          | ▉▉▉▉▉▉ 5
  rom          | ▉▉▉▉▊ 4
  ml           | ▉▉▍ 2

That's all for now.

License

The barcharts scripts are dedicated to the public domain. Use it as you please with no restrictions whatsoever.

Questions? Comments?

Send them along to the wwwmake Forum/Mailing List. Thanks!