Web www.gerd-tentler.de
 Version 4.10 (released Jan. 7, 2012) [Download]

Horizontal Bar-Graphs

Have a look at the following examples to see how you can create your own graphs:
Example #1
The most simple graph looks like this:
\$graph = BAR_GRAPH->new("hBar");
\$graph->{values} = "380,150,260,310,430";
print \$graph->create();
1
25%
2
10%
3
17%
4
20%
5
28%
Example #2
Now let's add some labels and titles:
\$graph = BAR_GRAPH->new("hBar");
\$graph->{values} = "380,150,260,310,430";
\$graph->{labels} = "Jan.,Feb.,Mar.,Apr.,May";
\$graph->{titles} = "Month,Sales";
print \$graph->create();
MonthSales
Jan.
25%
Feb.
10%
Mar.
17%
Apr.
20%
May
28%
Example #3
It's also possible to create grouped bar-graphs for comparison.
Separate grouped values by a semicolon and add a legend:
\$graph = BAR_GRAPH->new("hBar");
\$graph->{labels} = "Jan.,Feb.,Mar.,Apr.,May";
\$graph->{titles} = "Month,Sales";
\$graph->{values} = "380;420, 150;340, 260;120, 310;250, 430;370";
\$graph->{legend} = "2001,2002";
print \$graph->create();
MonthSales
Jan.
13%
14%
Feb.
5%
11%
Mar.
9%
4%
Apr.
10%
8%
May
14%
12%

2001
2002

If you want to use an array for the values, here's an example:
\$graph->{values} = ["380;420", "150;340", "260;120"];
Example #4
Let's change some colors and show the values:
\$graph = BAR_GRAPH->new("hBar");
\$graph->{labels} = "Jan.,Feb.,Mar.,Apr.,May";
\$graph->{titles} = "Month,Sales,Percent";
\$graph->{values} = "380;420, 150;340, 260;120, 310;250, 430;370";
\$graph->{legend} = "2001,2002";
\$graph->{graphBGColor} = "#B0E0B0";
\$graph->{graphBorder} = "1px solid green";
\$graph->{titleColor} = "yellow";
\$graph->{titleBGColor} = "#60C060";
\$graph->{barColors} = "#C0D0C0,#80D080";
\$graph->{barBGColor} = "#D0F0D0";
\$graph->{labelColor} = "yellow";
\$graph->{labelBGColor} = "#60C060";
\$graph->{absValuesColor} = "#008000";
\$graph->{absValuesBGColor} = "#D0F0D0";
\$graph->{percValuesColor} = "#008000";
\$graph->{legendColor} = "#008000";
\$graph->{legendBGColor} = "#D0F0D0";
\$graph->{legendAbsValues} = 1;
\$graph->{showValues} = 1;
print \$graph->create();
MonthSalesPercent
Jan.  380
13%
420
14%
Feb.  150
5%
340
11%
Mar.  260
9%
120
4%
Apr.  310
10%
250
8%
May  430
14%
370
12%

2001(1530)
2002(1500)
Example #5
Bar width (pixels), length (ratio) and border (CSS-spec) are also changable.
By the way, BAR_GRAPH also supports floating point numbers and negative values:
\$graph = BAR_GRAPH->new("hBar");
\$graph->{labels} = "Jan.,Feb.,Mar.,Apr.,May";
\$graph->{barColors} = "white";
\$graph->{showValues} = 1;
\$graph->{values} = "0.38,-0.15,-0.26,0.31,0.43";
\$graph->{percValuesDecimals} = 2;
\$graph->{barWidth} = 40;
\$graph->{barLength} = 1.5;
\$graph->{barBorder} = "2px solid red";
print \$graph->create();
Jan.  0.38
24.84%
Feb.  -0.15
9.80%
Mar.  -0.26
16.99%
Apr.  0.31
20.26%
May  0.43
28.10%
Example #6
For large amounts of values, it may be useful to split them into several charts:
\$graph = BAR_GRAPH->new("hBar");
\$graph->{values} = "1,2,3,4,5,6,7,8,9,10,10,9,8,7,6,5,4,3,2,1";
\$graph->{labelBGColor} = "#C0C0F0";
\$graph->{barBGColor} = "#E0E0F0";
\$graph->{charts} = 2;
print \$graph->create();
1
1%
2
2%
3
3%
4
4%
5
5%
6
5%
7
6%
8
7%
9
8%
10
9%
11
9%
12
8%
13
7%
14
6%
15
5%
16
5%
17
4%
18
3%
19
2%
20
1%
Example #7
It is possible to set extra colors for bars whose value exceeds certain levels:
\$graph = BAR_GRAPH->new("hBar");
\$graph->{values} = "380,150,260,310,430";
\$graph->{showValues} = 1;
\$graph->{barLevelColors} = [1, "red", 260, "yellow", 380, "lightgreen"];
print \$graph->create();
1  380
25%
2  150
10%
3  260
17%
4  310
20%
5  430
28%

NOTE: All level-color-pairs should be written in ascending order, and of course this feature is not suited for grouped bar-graphs.

You can also use the keyword MAX for setting the color of the bar with the highest value:
\$graph = BAR_GRAPH->new("hBar");
\$graph->{values} = "380,150,260,310,430";
\$graph->{showValues} = 1;
\$graph->{barLevelColors} = [1, "#C0C0FF", 300, "#8080FF", "MAX", "#4040FF"];
print \$graph->create();
1  380
25%
2  150
10%
3  260
17%
4  310
20%
5  430
28%
Example #8
Let's do some more design changes and add a prefix to the values:
\$graph = BAR_GRAPH->new("hBar");
\$graph->{values} = "380,150,260,310,430";
\$graph->{labels} = "Jan.,Feb.,Mar.,Apr.,May";
\$graph->{showValues} = 1;
\$graph->{barColors} = "#E0E0E0";
\$graph->{barBGColor} = "white";
\$graph->{barBorder} = "1px solid #808080";
\$graph->{labelColor} = "#A0A0A0";
\$graph->{labelBGColor} = "";
\$graph->{labelBorder} = "1px dashed #A0A0A0";
\$graph->{labelFont} = "Arial Black, Arial, Helvetica";
\$graph->{labelSize} = 16;
\$graph->{absValuesColor} = "silver";
\$graph->{absValuesBGColor} = "white";
\$graph->{absValuesBorder} = "1px solid silver";
\$graph->{absValuesFont} = "Verdana, Arial, Helvetica";
\$graph->{absValuesSize} = 14;
\$graph->{absValuesPrefix} = "€";
\$graph->{percValuesColor} = "#C0C0C0";
\$graph->{percValuesFont} = "Comic Sans MS, Times New Roman";
\$graph->{percValuesSize} = 16;
print \$graph->create();
Jan.  €380
25%
Feb.  €150
10%
Mar.  €260
17%
Apr.  €310
20%
May  €430
28%
Example #9
You can also use images (PNG, JPG or GIF) instead of bar colors, and add some space between labels:
\$graph = BAR_GRAPH->new("hBar");
\$graph->{values} = "50;30;40, 60;80;50, 70;40;60";
\$graph->{labels} = "Jan.,Feb.,Mar.";
\$graph->{legend} = "cats,dogs,birds";
\$graph->{barColors} = "blue.gif,red.gif,green.gif";
\$graph->{labelSpace} = 10;
print \$graph->create();
Jan.
10%
6%
8%
Feb.
13%
17%
10%
Mar.
15%
8%
13%

cats
dogs
birds

NOTE: Images are not included in this package.
Example #10
Sometimes you have very similar values, like for instance 1000, 1010, 1020. The difference between them is too small to view in a graph:
\$graph = BAR_GRAPH->new("hBar");
\$graph->{values} = "1010,1020,1030";
\$graph->{showValues} = 1;
print \$graph->create();
1  1010
33%
2  1020
33%
3  1030
34%

In this case you can tweak the bar length by using the baseValue variable. Please note that not only the bar length, but also the percentage changes accordingly:
\$graph = BAR_GRAPH->new("hBar");
\$graph->{values} = "1010,1020,1030";
\$graph->{baseValue} = 1000;
\$graph->{showValues} = 1;
print \$graph->create();
1  1010
17%
2  1020
33%
3  1030
50%