NAME
Term::Chart - Create attractive bar charts for the terminal interface.
SYNOPSIS
A Simple Horizontal Bar Chart
my $tc = Term::Chart->new();
$tc->add_values(map { $_**2 } 1 .. 9);
print "$tc\n";
HTML approximation
▅▅▅▅▅
▅▅▅▅▅▅▅▅▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
Vertical Dot Chart w/ Border and Labels
my $tc = Term::Chart->new(
    {   orientation => 'vertical',
        style       => 'dot',
        border      => 1,
        tip         => "\x{29BF}",
    }
);
my @values = 0 .. 8;
push @values, reverse 0 .. 7;
for my $n (@values)
{
    my %datum = (
        value => $n,
        label => $n,
    );
    $tc->add_value( \%datum );
}
print "$tc\n";
HTML approximation
┃ ⦿ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ⦿ ⦿ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ⦿ ⦿ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ⦿ ⦿ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ⦿ ⦿ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ⦿ ⦿ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ⦿ ⦿ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ⦿ ⦿┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃⦿ ⦿┃
┃܅܅܅܅܅܅܅܅܅܅܅܅܅܅܅܅܅┃
┃01234567876543210┃
┗━━━━━━━━━━━━━━━━━┛
Horizontal Bar Chart w/ Border and Color Gradients
my $tc = Term::Chart->new(
    {   orientation => 'horizontal',
        border      => 1,
        bar         => "\x{2015}",
        tip         => "\x{29BF}",
        color_range => [ 160 .. 165 ],
    }
);
for my $n (qw( 0 1 2 3 4 5 6 5 4 3 2 1 0 ))
{
    my %datum = (
        value => $n,
        label => "label $n",
    );
    $tc->add_value( \%datum );
}
print "$tc\n";
HTML approximation
┃label 0:⦿ ┃
┃label 1:――――――――――――――――――――――――⦿ ┃
┃label 2:――――――――――――――――――――――――――――――――――――――――――――――――⦿ ┃
┃label 3:――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――⦿ ┃
┃label 4:――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――⦿ ┃
┃label 5:――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――⦿ ┃
┃label 6:―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――⦿┃
┃label 5:――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――⦿ ┃
┃label 4:――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――⦿ ┃
┃label 3:――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――⦿ ┃
┃label 2:――――――――――――――――――――――――――――――――――――――――――――――――⦿ ┃
┃label 1:――――――――――――――――――――――――⦿ ┃
┃label 0:⦿ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Vertical Bar Chart w/ ANSI Colors
my $tc = Term::Chart->new(
    {   orientation => 'vertical',
        tip         => 'x',
        color_range => [ 160 .. 165 ],
    }
);
for my $n (qw( 0 1 2 3 4 5 6 5 4 3 2 1 0 ))
{
    my %datum = (
        value => $n,
        label => $n,
    );
    $tc->add_value( \%datum );
}
print "$tc\n";
HTML approximation
▉
▉
▉
▉
▉
x▉x
▉▉▉
▉▉▉
▉▉▉
▉▉▉
▉▉▉
▉▉▉
x▉▉▉x
▉▉▉▉▉
▉▉▉▉▉
▉▉▉▉▉
▉▉▉▉▉
▉▉▉▉▉
▉▉▉▉▉
x▉▉▉▉▉x
▉▉▉▉▉▉▉
▉▉▉▉▉▉▉
▉▉▉▉▉▉▉
▉▉▉▉▉▉▉
▉▉▉▉▉▉▉
▉▉▉▉▉▉▉
x▉▉▉▉▉▉▉x
▉▉▉▉▉▉▉▉▉
▉▉▉▉▉▉▉▉▉
▉▉▉▉▉▉▉▉▉
▉▉▉▉▉▉▉▉▉
▉▉▉▉▉▉▉▉▉
▉▉▉▉▉▉▉▉▉
x▉▉▉▉▉▉▉▉▉x
▉▉▉▉▉▉▉▉▉▉▉
▉▉▉▉▉▉▉▉▉▉▉
▉▉▉▉▉▉▉▉▉▉▉
▉▉▉▉▉▉▉▉▉▉▉
▉▉▉▉▉▉▉▉▉▉▉
▉▉▉▉▉▉▉▉▉▉▉
x▉▉▉▉▉▉▉▉▉▉▉x
܅܅܅܅܅܅܅܅܅܅܅܅܅
0123456543210
Horizontal w/ a Border
my $tc = Term::Chart->new( { border => 2 } );
for ( 0 .. 2 )
{
    for my $n (qw( 0 1 2 3 2 1 0 ))
    {
        $tc->add_value( { value => $n**2 } );
    }
}
print "$tc\n";
HTML approximation
┃▅ ┃
┃▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅ ┃
┃▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅ ┃
┃▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅┃
┃▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅ ┃
┃▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅ ┃
┃▅ ┃
┃▅ ┃
┃▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅ ┃
┃▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅ ┃
┃▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅┃
┃▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅ ┃
┃▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅ ┃
┃▅ ┃
┃▅ ┃
┃▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅ ┃
┃▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅ ┃
┃▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅┃
┃▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅ ┃
┃▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅ ┃
┃▅ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Horizontal w/ Color Gradient
my $tc = Term::Chart->new(
    {   border      => 0,
        color_range => [ 172 .. 177 ],
    }
);
for ( 0 .. 2 )
{
    for my $n (qw( 0 1 2 3 2 1 0 ))
    {
        $tc->add_value( { value => $n**2 } );
    }
}
print "$tc\n";
HTML approximation
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅
▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅
▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅▅
▅
DESCRIPTION
This module offers you a convenient way to create bar & dot charts and for your command line programs.
The charts can include ANSI color markup and Unicode drawing characters.
METHODS
new
The constructor accepts a hash ref with the following optional parameters.
- bar
 - 
The character used for the bars. The default is U+2585 for horizontal, and U+2589 for vertical.
 - tip
 - 
The last character on each bar, at the tip. The default is U+2585 for horizontal, and U+2589 for vertical.
 - height
 - 
The row height. Default is determined at run time by the Term::ReadKey module.
 - width
 - 
The column width. Default is determined at run time by the Term::ReadKey module.
 - color_range
 - 
Pass an array ref with a range (0 to 255) of color values which will be used accross each bar. The default is no colors at all.
 - style
 - 
Either 'dot' or 'bar'. Default is 'bar'.
 - orientation
 - 
Either 'vertical' or 'horizontal'. Default is 'horizontal'.
 - border
 - 
0 is no border, 1 to 255 to indicate the color of the border. The default is 0.
 
add_value(<hash ref>)
Add a value to be graphed. Accepts a hash ref with:
- label
 - 
The optional text label.
 - value
 - 
The numeric value being charted. (If a non-numeric value is supplied, then its string length will be used as the value.)
 
add_values(<list>)
Add a list of values (without labels) all at once.
print()
This will print the rendered chart to STDOUT.
AUTHOR
Dylan Doxey, <dylan@cpan.org>
COPYRIGHT AND LICENSE
Copyright (C) 2017 by Dylan Doxey
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.14.2 or, at your option, any later version of Perl 5 you may have available.