GD::Graph模块的一点总结,希望能有人需要

GD::Graph模块的一点总结,希望能有人需要

换工作了,平时也没少得到办理朋友的帮助
这些东西是我最近总结的,主要是cpan 上GD::Graph模块的文档和sample代码的一点注释和总结
希望能对需要的朋友有帮助。
在这里也谢谢那些平时经常解答问题的朋友,特别感谢版主和apile大哥

我平时的主要工作是做报表
应用的主要模块是spreadSheet::WriteExcel
下边的每个程序都是我自己跑过的

#!/usr/local/bin/perl
# 柱图示例程序
# 创建时间:2008-02-20
# 更多详情是查看cpan文档及示例程序
use strict;
use GD::Graph::bars;
use GD::Graph::hbars;
use GD::Graph::Data;
use Encode;         # 用于处理汉字问题
my $data = GD::Graph::Data->new(  # 数据集必须是一维数组(或其引用),其中存储的是各个子数据数组的引用
[
    ["2007-01","2007-02","2007-03","2007-04","2007-05","2007-06","2007-07", "2007-08", "2007-09"],
    [    50000,   12000,   24000,   33000,   19000,    8000,    6000,    15000,    21000],
    [    10000,    20000,    50000,    60000,    30000,  15124,    10000,     30000,     40000],
]
) or die GD::Graph::Data->error;

my @names = qw/GDBar GDBar-h/;
for my $my_graph (GD::Graph::bars->new(600,400),
                  GD::Graph::hbars->new(600,400))
{
    my $name = shift @names;
    print STDERR "Processing $name\n";
    $my_graph->set(
     # 与坐标轴有关的选项设定
     title               => decode("gb2312",'流量图'),     # 标题
     x_label             => decode("gb2312",'月份'),      # X轴标签(说明)
     two_axes            => 1,         # 两条坐标轴
     y1_label            => decode("gb2312",'流入流量(kbps)'), # Y轴标签(说明)  --- 可以有两个Y轴
     y2_label            => decode("gb2312",'流出流量(kbps)'),
     y1_max_value        => 60000,       # Y轴最大坐标值
#     y2_max_value        => 8,         # 默认为自动匹配
     y_tick_number       => 8,         # Y轴坐标的个数
     y_label_skip        => 2,         # Y轴每隔几个显示一次坐标值
#     y_plot_values      => 1,         # 默认为1显示,是否显示刻度值
     long_ticks          => 1,         # 默认为0(正常的短刻度线), 1:长坐标刻度线
#     tick_length     => 4,                 # 控制刻度线长度,与long_ticks => 0, 配套使用
#     x_ticks            => 0,         # 作用与long_ticks相同,限定X轴不显示刻度线,这样就只显示一条长刻度线
   x_plot_values      => 1,         # 默认为1,控制是否显示X轴刻度,如果设为0,则 x_ticks 属性将无效   
   y1_number_format    => sub { # from perlfaq5   # 控制坐标轴格式的子函数。
                   local $_ = shift;
                   1 while s/^([-+]?\d+)(\d{3})/$1,$2/;  # 此为数字分隔效果:20,000
                   $_;
              },
   y2_number_format    => sub { my $v = shift; sprintf("%.2f",$v/1024) }, # 控制坐标轴格式
#   zero_axis_only      => 1,         # 默认为0,当设为1时,将只画出0坐标轴,而不会在图的底部画轴,坐标也将在0轴上标注,都用于有正负值的图
#   use_axis            => [1, 2, 2],        # 当有两个坐标轴但是有三个数据集的时候。
                        # 可以设定这三个数据集分别使用左右哪个坐标轴
                        # 同时图例要设置三个数据集颜色:dclrs => [qw(lgreen lred lred)],
   legend_placement    => 'RT',       # 图例位置
   
   # bar选项
   bar_spacing         => 1,         # 同组柱间距
   bargroup_spacing   => 10,        # 柱组间距
   shadow_depth      => 4,         # 阴影宽度
   accent_treshold   => 200,        # 当bar的宽度大于此值时,bar的边缘会产生分界线,
                        # 如果想让图片效果连贯,则将此值设的比较大
   show_values         => 1,         # 在柱图上边标注数值
   values_format       => "%3.2f",      # 数值格式
#     cumulate          => 2,         # bar图的另一种形式。显示为积累方式。比较多用于体现出增长的情况
#   overwrite           => 1,         # 0:没有覆盖,普通柱图,两个bar平行。 1:两个bar相互覆盖。即在统一直线上 2:类似cumulate => 1的效果
     
     
     # 图例说明
     legend_placement    => 'RT',       # 图例位置
     x_label_position    => 1/2,
     
     # 颜色选项
     bgclr          => 'white',
     fgclr               => 'white',
     boxclr              => 'dblue',
     accentclr           => 'dblue',
     valuesclr           => '#ffff77',
     dclrs               => [qw(lgreen lred)], # 设置数据集对应的颜色。设置为undef将隐藏该数据组
   
     
   
     logo                => 'zhong-ying.png',# logo 制作好的图片放在/usr/local/src/soft/GDGraph-1.44_01/t/images目录下
     logo_position       => 'BR',
   
     transparent         => 0,        # 设定为1,背景色将变为透明色
   
     l_margin            => 10,       # 各个边距
     b_margin            => 10,
     r_margin            => 10,
     t_margin            => 10,
   
    ) or warn $my_graph->error;
    if ($name =~ /-h$/)  # 横向图效果更好
    {
   $my_graph->set(x_labels_vertical => 0, values_vertical => 0);  # 横向图:横轴标签为水平,柱上数值为水平方式
   $my_graph->set_legend('bottom axis', 'top axis');        # 设定图例内容 设置为undef将隐藏该图例
    }
    else
    {
   $my_graph->set(x_labels_vertical => 1, values_vertical => 1);
   $my_graph->set_legend('left axis', 'right axis');
    }
  # 相关字体设置
  # 字体文件SURSONG.TTF可在windos系统下寻找合适的自己文件
    $my_graph->set_y_label_font('/shvpn/test/wlj/GD/SURSONG.TTF', 12);    # Y轴说明
    $my_graph->set_x_label_font('/shvpn/test/wlj/GD/SURSONG.TTF', 12);    # X轴说明
    $my_graph->set_y_axis_font('/shvpn/test/wlj/GD/SURSONG.TTF', 12);  # Y轴坐标
    $my_graph->set_x_axis_font('/shvpn/test/wlj/GD/SURSONG.TTF', 12);  # X轴坐标
    $my_graph->set_title_font('/shvpn/test/wlj/GD/SURSONG.TTF', 16);     # 标题
    $my_graph->set_legend_font('/shvpn/test/wlj/GD/SURSONG.TTF', 14);    # 图例
    $my_graph->set_values_font('/shvpn/test/wlj/GD/SURSONG.TTF', 12);    # 数值
  
  
    $my_graph->plot($data) or die $my_graph->error;
    save_chart($my_graph, $name);
}
sub save_chart
{
my $chart = shift or die "Need a chart!";
my $name = shift or die "Need a name!";
local(*OUT);
my $ext = $chart->export_format;
open(OUT, ">$name.$ext") or
die "Cannot open $name.$ext for write: $!";
binmode OUT;
print OUT $chart->gd->$ext();
close OUT;
}


=====================================================================
=====================================================================

#!/usr/local/bin/perl
# line示例程序
# 创建时间:2008-02-20
# 更多详情是查看cpan文档及示例程序
use GD::Graph::lines;
use Encode;         # 用于处理汉字问题
print STDERR "Processing GDLine\n";
@data = (
    [ qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) ],
    [ reverse(4, 3, 5, 6, 3,  1.5, -1, -3, -4, -6, -7, -8)],
    [        (4, 3, 5, 6, 3,  1.5, -1, -3, -4, -6, -7, -8)],
    [        (2, 2, 2, 5, 5,  4.5,1.5,  2,  3,  5,  4,  3)],
);
$my_graph = new GD::Graph::lines();
$my_graph->set(
x_label => decode("gb2312",'月份'),
y_label => decode("gb2312",'故障增量'),
title => decode("gb2312",'故障增量情况统计图'),
y_max_value => 8,
y_min_value => -8,
y_tick_number => 16,
y_label_skip => 2,
box_axis => 0,       # 默认为1,通过轴包成一个box状
zero_axis_only => 1,    # 默认为0,当设为1时,将只画出0坐标轴,而不会在图的底部画轴,坐标也将在0轴上标注
x_label_position => 1,
y_label_position => 1,
# x_tick_number => 'auto',  # 自动设定X轴的坐标,以达到美观的效果,主要用于画时序图
x_label_skip => 3,
x_tick_offset => 2,     #  X轴坐标签的偏移量。隔过两个,从第三个开始显示

# 关于 line
line_width => 3,      # Line的宽度,默认1
dclrs           => [black,red,green],  # 线的颜色
line_types => [ 1, 2, 3 ],    # Available line types are 1: solid, 2: dashed, 3: dotted, 4: dot-dashed.
line_type_scale => 10,   # 控制虚线(dashed)的长度,主要用于区别point


  l_margin            => 10,       # 各个边距
b_margin            => 10,
r_margin            => 10,
t_margin            => 10,

transparent => 0,
);
$my_graph->set_legend(decode("gb2312",'上海'), decode("gb2312",'甘肃'), decode("gb2312",'河南'));
# 相关字体设置
    $my_graph->set_y_label_font('/shvpn/test/wlj/GD/SURSONG.TTF', 12);    # Y轴说明
    $my_graph->set_x_label_font('/shvpn/test/wlj/GD/SURSONG.TTF', 12);    # X轴说明
    $my_graph->set_y_axis_font('/shvpn/test/wlj/GD/SURSONG.TTF', 12);  # Y轴坐标
    $my_graph->set_x_axis_font('/shvpn/test/wlj/GD/SURSONG.TTF', 12);  # X轴坐标
    $my_graph->set_title_font('/shvpn/test/wlj/GD/SURSONG.TTF', 16);     # 标题
    $my_graph->set_legend_font('/shvpn/test/wlj/GD/SURSONG.TTF', 14);    # 图例
    $my_graph->set_values_font('/shvpn/test/wlj/GD/SURSONG.TTF', 12);    # 数值
# 制图
open(IMG, '>./GDLine.png') or die $!;
print IMG $my_graph->plot(\@data)->png;
close IMG;

===========================================================================
===========================================================================

#!/usr/local/bin/perl
# 饼图示例程序
# 创建时间:2008-02-20
# 更多详情是查看cpan文档及示例程序
use GD::Graph::pie;
use Encode;         # 用于处理汉字问题
print STDERR "Processing GDPie\n";
@data = (  # 数据集必须是一维数组(或其引用),其中存储的是各个子数据数组的引用
    ["1st(50%)","2nd(20%)","3rd(30%)","4rd(0.01%)"],  # 目前并有选项可以直接控制饼图上数值的显示方式,只能手工指定显示方式
    [    500,     200,       300,    1]
);
$my_graph = new GD::Graph::pie( 400, 300 );
#$my_graph = new GD::Graph::pie( );
$my_graph->set(
title      =>   decode("gb2312",'测试饼图'),   # 标题
# label      =>   'Label',      # 类似于饼图的说明,看情况可有可无
axislabelclr   =>   'white',      # 分割线颜色
pie_height    =>   20,           # 做出3D效果,设定饼图高度
dclrs           =>   [qw(lgreen lred blue black)],  # 设定饼图片颜色,如果不设定则默认自动分配

start_angle   =>   235,         # 第一个饼的起始角度  0°为正下方开始
suppress_angle  =>   5,           # 默认为0 小于这个值时饼图将不画这个角
                      # 现在的GD::Graph不能够像JfreeChart那样引出一条线去显示数值
                      # 所以用这种方式避免图显得很乱

legend_placement    => 'RR',       # 图例位置
legend_spacing   => 10,
# show_values         => 1,         # 这个选项在饼图中无效

  l_margin            => 20,        # 各个边距
b_margin            => 20,
r_margin            => 20,
t_margin            => 20,

transparent => 0,
);
$my_graph->set_legend("1st(50".decode("gb2312",'人').")", decode("gb2312",'2nd(20人)') ,decode("gb2312",'3rd(30人)'), decode("gb2312",'4rd(1人)')),  # 目前并有选项可以直接控制图例上数值的显示方式,只能手工指定显示方式
#$my_graph->set_value_font(GD::Font->Giant);
#$my_graph->set_legend_font(GD::Font->Large);
$my_graph->set_title_font('/shvpn/test/wlj/GD/SURSONG.TTF', 18);
$my_graph->set_label_font('/shvpn/test/wlj/GD/SURSONG.TTF', 15);
$my_graph->set_value_font('/shvpn/test/wlj/GD/SURSONG.TTF', 12);
$my_graph->set_legend_font('/shvpn/test/wlj/GD/SURSONG.TTF', 12); # 图例字体格式  (字体,字号)
open(IMG, '>./GDPie.png') or die $!;
print IMG $my_graph->plot(\@data)->png;
close IMG;


===========================================================================
===========================================================================

下边这个就是个零碎的选项注释:

# sample1* -- bar 柱图
# sample2* -- area 片图
# sample3* -- point 点图
# sample4* -- linePoint 点线图
# sample5* -- line 线图
# sample6*7* -- fix 混合图
# sample18.pl  sample42.pl 描述了特殊的赋值方式

$my_graph->set(
x_label         => 'X Label',
y_label         => 'Y label',
title           => 'Two data sets',
long_ticks      => 0,         # 短刻度线,可通过tick_length控制刻度线长度
long_ticks       => 1,   # 显示长刻度线
  x_ticks          => 0,   # 同时限定X轴不显示刻度线,这样就只显示一条长刻度线
y_max_value     => 40,
x_tick_number => 'auto',  # 自动设定X轴的坐标,以达到美观的效果 如果设定x_tick_number为某一个数值则X轴将画出这么多个坐标,默认Undef每个值都作为轴坐标显示
y_tick_number   => 8,    # 设定y轴刻度线的个数
x_label_skip => 3,     #
x_tick_offset => 2,     # X轴坐标签的偏移量。隔过两个,从第三个开始显示
y_label_skip    => 2,    # 每隔几个可读线才显示值
y_plot_values    => 1,   # 逐个显示刻度值,与跳过刻度值相对。
  x_plot_values    => 1,
  x_plot_values   => 0,   # 是否显示坐标值 默认1  0:不显示
bar_spacing     => 3,         # 柱间距
bargroup_spacing => 10,        # 柱组间距
shadow_depth    => 4,
accent_treshold => 200,        # 当bar的宽度大于此值时,bar的边缘会产生分界线,如果想让图片效果连贯,则将此值设的比较大
transparent     => 1,         # 设定为1,背景色将自动改为透明色
zero_axis_only      => 1,    # 默认为0,当设为1时,将只画出0坐标轴,而不会在图的底部画轴,坐标也将在0轴上标注
two_axes            => 1,       # 两条坐标轴
use_axis            => [1, 2, 2],     # 当有两个坐标轴但是有三个数据集的时候。
                    # 可以设定这三个数据集分别使用左右哪个坐标轴
                    # 同时图例要设置三个数据集颜色:dclrs => [qw(lgreen lred lred)],
legend_placement    => 'RT',     # 图例位置

show_values         => 1,     # 在柱图上边标注数值
values_format       => "%3.2f",  # 数值格式
y1_number_format    => sub { # from perlfaq5   # 控制坐标轴格式的子函数。
   local $_ = shift;
   1 while s/^([-+]?\d+)(\d{3})/$1,$2/;  # 此为数字分隔效果:20,000
   $_;
},
y2_number_format    => sub { my $v = shift; sprintf("%.2f",$v/1024) }, # 控制坐标轴格式


interlaced       => 1,   # 默认为1 ,没明白效果

$my_graph->set(x_labels_vertical => 0, values_vertical => 0);  # 横向图:横轴标签为水平,柱上数值为水平方式
$my_graph->set_legend('bottom axis', 'top axis');        # 设定图例内容

cumulate        => 2,           # bar图的另一种形式。显示为积累方式。
overwrite           => 1,    # 0:没有覆盖,普通柱图,两个bar平行。 1:两个bar相互覆盖。即在统一直线上 2:类似cumulate => 1的效果
# cumulate       => 1,    # 此属性不适合含有负值的图,用作查看增长情况不错。

dclrs           => [ undef, qw(dgreen green) ],  # 第一个数据集没有定义颜色,则默认为透明,即隐藏起来。
$my_graph->set_legend(undef, qw(low high));    # 第一个图例定义为undef,则隐藏第一个图例


# 点图  new GD::Graph::points
marker_size => 6,  # 点的大小
markers => [ 5,7 ], # Available markers are:
                 # 1: filled square, 2: open square, 3: horizontal cross,
                 # 4: diagonal cross, 5: filled diamond, 6: open diamond,
                 # 7: filled circle, 8: open circle, 9: horizontal line,
                 # 10: vertical line. Note that the last two are not part of the default list.
                 # Default: [1,2,3,4,5,6,7,8]
# 点线图 new GD::Graph::linespoints
skip_undef => 1,  # 默认为0,设为1:将跳过没有定义的点,则line将会断。如果设为0,则会直接连上有值的点

# 线图  new GD::Graph::lines
box_axis => 0,   # 是否把轴圈成一个box 默认是1
line_width => 3,  # line的宽度 默认1
line_types => [ 1, 2, 3, 4 ],    # Available line types are 1: solid, 2: dashed, 3: dotted, 4: dot-dashed.
line_type_scale => 10,   # 控制虚线(dashed)的长度,主要用于区别point
legend_marker_width => 24, # 图例的宽度(还可设定高度)
no_axes => 1,   #默认值undef画出所有轴, 设定为0,1有不同的含义

# 饼图 GD::Graph::pie
pie_height => 30,  # 饼图的高度,做出3D的效果
start_angle => 235,  # 第一个饼的起始角度  0°为正下方开始
suppress_angle => 5,   # 默认为0 小于这个值时饼图将不画这个角
'3d' => 0,      # 默认3D  设为0 画二维饼图
# 控制字帖大小
$my_graph->set_value_font(GD::Font->Giant);
GD::Font->Small
GD::Font->Large
GD::Font->MediumBold
GD::Font->Tiny
GD::Font->Giant

==============================================================
===============================================================

sub save_chart
{
my $chart = shift or die "Need a chart!";
my $name = shift or die "Need a name!";
local(*OUT);
my $ext = $chart->export_format;
open(OUT, ">$name.$ext") or
  die "Cannot open $name.$ext for write: $!";
binmode OUT;
print OUT $chart->gd->$ext();
close OUT;
}
1;


=============================================================
=============================================================

这个是一个用SpreadSheet::WriteEXcel 和GD::Graph配合制报表的一个例子

#!/usr/local/bin/perl
# 图表报表实例程序
# 创建时间:2008-02-20
# 更多详情是查看cpan文档及示例程序
use strict;
use Spreadsheet::WriteExcel;
use GD::Graph::bars;
use GD::Graph::hbars;
use GD::Graph::Data;
use Encode;                                                                        # 用于处理汉字问题

require("/shvpn/nms/lib/SetBookFmt.pl");

print "Strat testing GD Graph report \n";

# 创建报表文件句柄
my $dest_book  = Spreadsheet::WriteExcel->new("./TestGDReport.xls");
# 创建sheet页
my $dest_sheet =  $dest_book->add_worksheet( decode("gb2312", 'GD图形测试报表') );

# 报表格式 以下格式在nms/lib/SetBookFmt.pl函数中进行了定义,详见Spreadsheet::WriteExcel说明文档
        my $fmt_head=&SetBookFmt($dest_book,"fmt_title");
        $fmt_head->set_size(15);
        # 标题
        my $fmt_title=&SetBookFmt($dest_book,"fmt_title");
        # 副标题
        my $fmt_subtitle=&SetBookFmt($dest_book,"fmt_subtitle");
        # 列标题
        my $fmt_coltitle =&SetBookFmt($dest_book,"fmt_coltitle");
        # 数据
        my $fmt_data = &SetBookFmt($dest_book,"fmt_data");
       
        # 报表所需数据集
        # 月份
        my @month = qw(2007-01 2007-02 2007-03 2007-04 2007-05 2007-06 2007-07 2007-08 2007-09);
        # 流入流量
        my @inFlux = qw(50000 12000 24000 33000 19000 8000 6000 15000 21000);
        # 流出流量
        my @outFlux        = qw(10000 20000 50000 60000 30000 15124 10000 30000 40000);
       
        ###------- 绘制数据表格部分 --------###
        # 开始绘制表头
        $dest_sheet->set_row(0,30);        # 设置行高
        $dest_sheet->set_column(0,2,20); # 设置列宽               
        $dest_sheet->merge_range(0,0,0,2,decode("gb2312"," GD测试报表"),$fmt_head);
        $dest_sheet->merge_range(1,0,1,2,decode("gb2312"," 此报表主要用于演示报表的主要制作流程及测试GD制图的效果 "),$fmt_subtitle);
       
        # 打印列标题
        $dest_sheet->write(2,0,decode("gb2312",'月份'),                        $fmt_coltitle);
        $dest_sheet->write(2,1,decode("gb2312",'流入流量(bps)'),                        $fmt_coltitle);
        $dest_sheet->write(2,2,decode("gb2312",'流出流量(bps)'),                        $fmt_coltitle);
       
        # 制表:
        my $endLine = 3; #当前行号
        for (my $i = 0; $i <= $#month; $i++) {
                $dest_sheet->write($endLine,0,$month[$i],$fmt_data);
                $dest_sheet->write($endLine,1,$inFlux[$i],$fmt_data);
                $dest_sheet->write($endLine,2,$outFlux[$i],$fmt_data);
                $endLine++;
        }
       
        ### ------- 绘制表格结束 ----------###
       
        ### ------- 开始绘制统计图 ---- ###
       
        # 整理统计图所需data数据集
        my @data;                # 数据集必须是一维数组,其中存储的是各个子数据数组的引用
        push @data, \@month;
        push @data, \@inFlux;
        push @data, \@outFlux;
       
        # 绘制bar图:
        &createBarChart(\@data);
       
        # 插入绘制成功的bar图:
        $endLine += 3;
        $dest_sheet->insert_image($endLine,0,"./tmpGDBar.png");
       
        # 也可以增加sheet页:
        my $dest_sheet_add =  $dest_book->add_worksheet( decode("gb2312", '增加sheet页') );
        # 按照特定报表需要,写入数据及统计图
        $dest_sheet_add->insert_image(5,5,"./tmpGDBar.png");
        # insert_image($row, $col, $filename, $x, $y, $scale_x, $scale_y) 参数说明,详见capn文档
                 # $row,$col坐标
                # $filename 全路径文件名
                # $x, $y,其实单元格的偏移量
                # $scale_x, $scale_y 图片比例
       
        # 关闭文件句柄,报表创建成功
        $dest_book->close();
        # 删除临时的统计图文件
        unlink ("./tmpGDBar.png");
        print ("create GD Report succeed ! \n");
       

sub createBarChart{
        my $data = shift;

        my $my_graph = GD::Graph::hbars->new(600,400);
                 
  print STDERR "Processing PNG\n";

  $my_graph->set(
          # 与坐标轴有关的选项设定
          title               => decode("gb2312",'流量图'),                                        # 标题
          x_label             => decode("gb2312",'月份'),                                                # X轴标签(说明)
          two_axes            => 1,                                                                        # 两条坐标轴
          y1_label            => decode("gb2312",'流入流量(kbps)'),        # Y轴标签(说明)  --- 可以有两个Y轴
          y2_label            => decode("gb2312",'流出流量(kbps)'),
          y1_max_value        => 60000,                                                        # Y轴最大坐标值
#            y2_max_value        => 8,                                                                        # 默认为自动匹配
          y_tick_number       => 8,                                                                        # Y轴坐标的个数
          y_label_skip        => 2,                                                                        # Y轴每隔几个显示一次坐标值
#            y_plot_values                    => 1,                                                                        # 默认为1显示,是否显示刻度值
          long_ticks          => 1,                                                                        # 默认为0(正常的短刻度线), 1:长坐标刻度线
#            tick_length                                        => 4,                 # 控制刻度线长度,与long_ticks => 0, 配套使用
#            x_ticks                          => 0,                                                                        # 作用与long_ticks相同,限定X轴不显示刻度线,这样就只显示一条长刻度线
                x_plot_values                    => 1,                                                                        # 默认为1,控制是否显示X轴刻度,如果设为0,则        x_ticks 属性将无效                       
                y1_number_format    => sub { # from perlfaq5                        # 控制坐标轴格式的子函数。
                                                                                                                                  local $_ = shift;
                                                                                                                                  1 while s/^([-+]?\d+)(\d{3})/$1,$2/;                # 此为数字分隔效果:20,000
                                                                                                                                  $_;
                                                                                                        },
                y2_number_format    => sub { my $v = shift; sprintf("%.2f",$v/1024) }, # 控制坐标轴格式
#                        zero_axis_only      => 1,                                                                        # 默认为0,当设为1时,将只画出0坐标轴,而不会在图的底部画轴,坐标也将在0轴上标注,都用于有正负值的图
#                        use_axis            => [1, 2, 2],                             # 当有两个坐标轴但是有三个数据集的时候。
                                                                                                                                                                                        # 可以设定这三个数据集分别使用左右哪个坐标轴
                                                                                                                                                                                        # 同时图例要设置三个数据集颜色:dclrs => [qw(lgreen lred lred)],
                legend_placement    => 'RT',                                                        # 图例位置
               

                # bar选项
                bar_spacing         => 1,                                                                        # 同组柱间距
                bargroup_spacing                 => 10,                                                                # 柱组间距
                shadow_depth                    => 4,                                                                        # 阴影宽度
                accent_treshold                 => 200,                                                                # 当bar的宽度大于此值时,bar的边缘会产生分界线,
                                                                                                                                                                                        # 如果想让图片效果连贯,则将此值设的比较大
                show_values         => 1,                                                                        # 在柱图上边标注数值
                values_format       => "%3.2f",                                                # 数值格式
#            cumulate                        => 2,                                                                        # bar图的另一种形式。显示为积累方式。比较多用于体现出增长的情况
#                        overwrite           => 1,                                                                 # 0:没有覆盖,普通柱图,两个bar平行。 1:两个bar相互覆盖。即在统一直线上 2:类似cumulate => 1的效果
         
         
          # 图例说明
          legend_placement    => 'RT',                                                        # 图例位置
          x_label_position    => 1/2,
         
          # 颜色选项
          bgclr                                                    => 'white',
          fgclr               => 'white',
          boxclr              => 'dblue',
          accentclr           => 'dblue',
          valuesclr           => '#ffff77',
          dclrs               => [qw(lgreen lred)],        # 设置数据集对应的颜色。设置为undef将隐藏该数据组
  
         
  
          logo                => 'zhong-ying.png',# logo 制作好的图片放在/usr/local/src/soft/GDGraph-1.44_01/t/images目录下
          logo_position       => 'BR',
  
          transparent         => 0,                                                                # 设定为1,背景色将变为透明色
  
          l_margin            => 10,                                                        # 各个边距
          b_margin            => 10,
          r_margin            => 10,
          t_margin            => 10,
  

  ) or warn $my_graph->error;

  
        $my_graph->set(x_labels_vertical => 0, values_vertical => 0);                # 横向图:横轴标签为水平,柱上数值为水平方式
        $my_graph->set_legend('bottom axis', 'top axis');                                                                # 设定图例内容 设置为undef将隐藏该图例
  

        # 相关字体设置
  $my_graph->set_y_label_font('/shvpn/test/wlj/GD/SURSONG.TTF', 12);                                # Y轴说明
  $my_graph->set_x_label_font('/shvpn/test/wlj/GD/SURSONG.TTF', 12);                                # X轴说明
  $my_graph->set_y_axis_font('/shvpn/test/wlj/GD/SURSONG.TTF', 12);                # Y轴坐标
  $my_graph->set_x_axis_font('/shvpn/test/wlj/GD/SURSONG.TTF', 12);                # X轴坐标
  $my_graph->set_title_font('/shvpn/test/wlj/GD/SURSONG.TTF', 16);                                        # 标题
  $my_graph->set_legend_font('/shvpn/test/wlj/GD/SURSONG.TTF', 14);                                # 图例
  $my_graph->set_values_font('/shvpn/test/wlj/GD/SURSONG.TTF', 12);                                # 数值
       
       

        open(IMG, '>./tmpGDBar.png') or die $!;
        print IMG $my_graph->plot($data)->png;
        close IMG;

}

3Q

顶!
和 gnuplot 有什么区别?
不错不错,这个是好东东,要顶的
赞一个的先!
楼主,你发表的文章里面把左边那个“禁用smilies”点上……,这样好些,哈哈


QUOTE:
原帖由 perljoker 于 2008-3-11 16:03 发表
楼主,你发表的文章里面把左边那个“禁用smilies”点上……,这样好些,哈哈

接受批评。。。。哈哈