グラフサンプル (No.-33) グラフ名: 画像名:sample71.gif CGI名:sample71.pl
sample71.gif


【要点】
(1)混合グラフを描く
  GD::Graph::mixed; #円グラフ以外の組み合わせでグラフを
                        #描きます。
 my ($width, $height) = (500, 400); #グラフキャンバスの大きさの指定(ピクセル)
 my $my_graph = new GD::Graph::mixed($width, $height);

 #円グラフ以外(太字はグラフの種類)とは、
 #GD::Graph::lines:折れ線グラフ
 #GD::Graph::bars and GD::Graph::bars:棒グラフ
 #GD::Graph::points:点グラフ
 #GD::Graph::linespoints:折れ線と点のグラフ
 #GD::Graph::area:面グラフ です。
(2)グラフの種類を指定する
  types => [qw ( lines bars points area linespoints ) ], #グラフの種類
                                            #折れ線 棒 点 面 折れ線+点
  default_type => 'points', #混合グラフにおいてグラフの種類がわからなかった
                            #デフォルトはlinesです。
(3)Y軸目盛を描く
  y_max_value => 10,  #Y軸目盛の最大値
  y_min_value => -5,  #Y軸目盛の最小値
  y_tick_number => 3,  #Y軸目盛の数
  y_label_skip => 1,  #Y軸目盛の値の表示のスキップ数
(4)目盛の描く描かないを指定する
  x_plot_values => 1, #描きます
  y_plot_values => 1, #描きます
   # 0:X軸、Y軸の目盛の値が表示されません。 1:表示されます。(デフォルト)
  long_ticks => 1,  #Y軸の目盛線を箱いっぱいに引く
(5)X軸ラベルの表示方法

  x_labels_vertical => 1, #X軸ラベルが垂直に表示されます。
                          #長い文字列の場合用いる。
  x_ticks => 0,  #X軸目盛線を描きません。デフォルトは、1(描く)。

sample71.pl

chdir("C:\\Inetpub\\wwwroot\\uriage"); #カレントディレクトリ指定(IISの場合)
use lib 'C:/Inetpub/wwwroot/uriage'; #GD::Graphライブラリ格納フォルダ GD (固定)の場所
use jcode; #jcode.pl PM版。UTF-8コード変換に使用

use strict;
use GD::Graph::mixed;
require 'save.pl';

print STDERR "Processing sample71\n";

my @data = ( 
    ["1st","2nd","3rd","4th","5th","6th","7th", "8th", "9th"],
    [    1,    2,    5,    6,    3,  1.5,   -1,    -3,    -4],
    [   -4,   -3,    1,    1,   -3, -1.5,   -2,    -1,     0],
    [    9,    8,    9,  8.4,  7.1,  7.5,    8,     3,    -3],
    [  0.1,  0.2,  0.5,  0.4,  0.3,  0.5,  0.1,     0,   0.4],
    [ -0.1,    2,    5,    4,   -3,  2.5,  3.2,     4,    -4],
);
my ($width, $height) = (500, 400);
my $my_graph = new GD::Graph::mixed($width, $height);

$my_graph->set( 
	types => [ qw( lines bars points area linespoints ) ],
	default_type => 'points',
);
my $title="混合タイプとTTF";                                 #X軸ラベル文字
Jcode::convert(\$title,'utf8',"sjis");       #X軸ラベル文字のUTF-8への変換

$my_graph->set( 

	x_label => 'X Label',
	y_label => 'Y label',
	title => $title, #'Mixed Type and TTF',タイトルを日本語に変更

	y_max_value => 10,
	y_min_value => -5,
	y_tick_number => 3,
	y_label_skip => 1,
	x_plot_values => 1,
	y_plot_values => 1,

	long_ticks => 1,
	x_ticks => 0,
	x_labels_vertical => 1,

	legend_marker_width => 24,
	line_width => 3,
	marker_size => 5,

	bar_spacing => 6,

	legend_placement => 'RC',

	transparent => 0,
);

$my_graph->set_title_font('./dasaji_win.ttf', 18);   #Dustismo_Sans.ttfからダサ字に変更
$my_graph->set_x_label_font('./dasaji_win.ttf', 14); #ダサ字に変更
$my_graph->set_y_label_font('./dasaji_win.ttf', 14); #ダサ字に変更
$my_graph->set_x_axis_font('./dasaji_win.ttf', 12);  #ダサ字に変更
$my_graph->set_y_axis_font('./dasaji_win.ttf', 12);  #ダサ字に変更
$my_graph->set_legend_font('./dasaji_win.ttf', 12);  #ダサ字に変更

$my_graph->set_legend( qw( one two three four five six ) );

# Put some background text in, but only if we have TTF support

if ($my_graph->can_do_ttf)
{
    my $gd = $my_graph->gd;
    my $white = $gd->colorAllocate(255,255,255);
    my $pink = $gd->colorAllocate(255,240,240);
    my $gdta;

    $gdta = GD::Text::Align->new($gd,
	text => 'GD::Graph',
	font => '../Dustismo_Sans.ttf',
	ptsize => 72,
	colour => $pink,
	valign => 'center',
	halign => 'center',
    ) or warn $gdta->error;

    $gdta->draw($width/2, $height/2, atan2($height, $width));
}

$my_graph->plot(\@data);

# Use a hotspot to draw some extra text on the chart
# XXX This doesn't work nicely. Need a nicer way to get the maximum.
if (1) {
    my $gd = $my_graph->gd;
    my $red = $gd->colorResolve(255,0,0);
    my @l = $my_graph->get_hotspot(1, 3);
    my ($x, $y) = ( ($l[1] + $l[3])/2, ($l[2] + $l[4])/2 );
    my $gdta;

    $gdta = GD::Text::Align->new($gd,
	text => 'maximum',
	font => ['../Dustismo_Sans.ttf', GD::Font->Small],
	ptsize => 12,
	colour => $red,
	valign => 'bottom',
	halign => 'center',
    ) or warn $gdta->error;
    
    $gdta->draw($x, $y + 2);
}


save_chart($my_graph, 'sample71');


(参考)
  ●本ソースコードの1〜3行目(挿入) 1 chdir("C:\Inetpub\wwwroot\uriage"); #カレントディレクトリ指定(IISの場合) 2 use lib 'C:/Inetpub/wwwroot/uriage'; #GD::Graphライブラリ格納フォルダ GD (固定)の場所 3 # Windows IIS 走行用に元ソースに挿入   ●>save.pl(グラフ画像保存ルーチン)

最終更新日:2005.1.17