■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(グラフ画像保存ルーチン)
|