该类可以生成饼状图(2D/3D),柱状图(2D/3D),以及折线图,可控制输出至浏览器或文件,控制输出的jpeg图像的质量。
所有的设置工作只有5个函数:
1。图表背景色设置setbgcolor()
2。图表参数设置setchartdata()
2。图表标题设置settitle()
3。图表注释设置setdesc()
4。图表图形设置setgraphics()
详细的设置参数请参考文档注释或是后面的测试页面demo.php
<?
php
/*
*
* PLChart - PHP图表生成工具 - Create charts in PHP
*
* ====================================================================
* Filename : plchart.php
* Summary: PLChart图表类文件 - PLChart class file
* Author: zeroleonhart ( msn:zeroleonhart@hotmail.com )
* Version: 0.060811
* Copyright (c)2006 zeroleonhart@hotmail.com
* ====================================================================
*
*
*/
class
plchart
{
//
============================ 参数定义 - define references ============================
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
// 图表变量 - chart variable
var
$chart
;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
图表类型 - chart type
var
$type
;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
3D效果 - 3D effect
var
$d3d
;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
图表宽度 - chart width
var
$width
;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
图表高度 - chart height
var
$height
;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
图表质量 - chart quality
var
$quality
;
//
图表背景色 - image backgroundcolor
var
$bgcolor
=
array
();
//
图表参数 - chart parameter
var
$param
=
array
();
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
保存为文件的路径 - saving file directory
var
$savefile
;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
图形参数 - graphics references
var
$graphics
=
array
();
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
标题参数 - title references
var
$title
=
array
();
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
注释参数 - description references
var
$desc
=
array
();
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
图表颜色数组 - colors array in chart
var
$colors
=
array
();
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
颜色定义 - define color
var
$colordefine
=
array
(
"
lightgray
"
=>
array
(
192
,
192
,
192
)
,
"
darkgray
"
=>
array
(
144
,
144
,
144
)
,
"
lightred
"
=>
array
(
255
,
0
,
0
)
,
"
darkred
"
=>
array
(
128
,
0
,
0
)
,
"
lightgreen
"
=>
array
(
0
,
255
,
0
)
,
"
darkgreen
"
=>
array
(
0
,
80
,
0
)
,
"
lightblue
"
=>
array
(
0
,
0
,
255
)
,
"
darkblue
"
=>
array
(
0
,
0
,
80
)
,
"
lightyellow
"
=>
array
(
255
,
255
,
0
)
,
"
darkyellow
"
=>
array
(
200
,
200
,
50
)
,
"
lightcyan
"
=>
array
(
0
,
255
,
255
)
,
"
darkcyan
"
=>
array
(
0
,
90
,
90
)
,
);
//
============================ 设置函数 - setting functions ============================
/*
* @todo 设置图像背景色 - set the backgroundcolor of the chart image
*
* @param int $red
* @param int $green
* @param int $blue
*
*/
function
setbgcolor(
$red
=
0
,
$green
=
0
,
$blue
=
0
)
{
$this
->
bgcolor[
0
]
=
$red
;
$this
->
bgcolor[
1
]
=
$green
;
$this
->
bgcolor[
2
]
=
$blue
;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
/*
* @todo 设置图像参数 - set the parameters of the chart image
*
* @param string $type
* @param int $d3d
* @param int $width
* @param int $height
* @param int $quality
* @param array $data
* @param string $savefile
*
*/
function
setchartdata(
$type
=
"
pie
"
,
$d3d
=
1
,
$width
=
400
,
$height
=
400
,
$quality
=
70
,
$data
=
array
()
,
$savefile
=
''
)
{
$this
->
type
=
$type
;
//
图表类型 - type of the chart : pie, column, line
$this
->
d3d
=
$d3d
;
//
3D效果 -
$this
->
width
=
$width
;
//
图表宽度
$this
->
height
=
$height
;
//
图表高度
$this
->
quality
=
$quality
;
//
图表显示质量
$this
->
param
=
$data
;
//
源数据数组
$this
->
savefile
=
$savefile
;
//
保存文件路径
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
/*
* @todo 设置图像标题 - set the title of the chart
*
* @param string $tstring
* @param float $tfontsize
* @param float $tangle
* @param int $tposx
* @param int $tposy
* @param string $tfontfile
* @param int $tfred
* @param int $tfgreen
* @param int $tfblue
*
*/
function
settitle(
$tstring
=
''
,
$tfontsize
=
20
,
$tangle
=
0
,
$tposx
=
10
,
$tposy
=
20
,
$tfontfile
=
'
c:/windows/fonts/simhei.ttf
'
,
$tfred
=
0
,
$tfgreen
=
0
,
$tfblue
=
0
)
{
$this
->
title
=
array
(
$tfontsize
,
$tangle
,
$tposx
,
$tposy
,
$tfontfile
,
$tstring
,
$tfred
,
$tfgreen
,
$tfblue
);
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
/*
* @todo 设置图像注释 - set the decsription of the chart
*
* @param int $dposx
* @param int $dposy
* @param int $dwidth
* @param int $dheight
* @param int $dmargin
* @param int $dsize
* @param int $dangle
* @param string $dfontfile
* @param int $dfred
* @param int $dfgreen
* @param int $dfblue
*
*/
function
setdesc(
$dposx
=
0
,
$dposy
=
0
,
$dwidth
=
100
,
$dheight
=
300
,
$dmargin
=
10
,
$dsize
=
10
,
$dangle
=
0
,
$dfontfile
=
'
c:/windows/fonts/simhei.ttf
'
,
$dfred
=
0
,
$dfgreen
=
0
,
$dfblue
=
0
)
{
$this
->
desc
=
array
(
$dposx
,
$dposy
,
$dwidth
,
$dheight
,
$dmargin
,
$dsize
,
$dangle
,
$dfontfile
,
$dfred
,
$dfgreen
,
$dfblue
);
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
/*
* @todo 设置图形 - set the graphics of the chart
*
* @param int $gstartx
* @param int $gstarty
* @param int $gwidth
* @param int $gheight
* @param int $gmargin
* @param float $shadow
*
*/
function
setgraphics(
$gstartx
=
0
,
$gstarty
=
0
,
$gwidth
=
100
,
$gheight
=
100
,
$gmargin
=
10
,
$shadow
=
0.1
)
{
$this
->
graphics
=
array
(
$gstartx
,
$gstarty
,
$gwidth
,
$gheight
,
$gmargin
,
$shadow
);
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
============================ 生成函数 - build functions ============================
/*
* @todo 生成图表实例 - build chart object
*
*/
function
buildchart()
{
//
图像头信息 - header of the image file
header
(
"
Content-type: image/jpeg
"
);
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
建立图像 - create image
$this
->
chart
=
imagecreatetruecolor(
$this
->
width
,
$this
->
height);
//
填充背景色 - set backgroundcolor
$bgc
=
imagecolorallocate(
$this
->
chart
,
$this
->
bgcolor[
0
]
,
$this
->
bgcolor[
1
]
,
$this
->
bgcolor[
2
]);
imagefill(
$this
->
chart
,
0
,
0
,
$bgc
);
//
定义颜色 - allocate colors in the graphics
foreach
(
$this
->
colordefine
as
$key
=>
$value
)
{
$
$key
=
imagecolorallocate(
$this
->
chart
,
$value
[
0
]
,
$value
[
1
]
,
$value
[
2
]);
array_push
(
$this
->
colors
,
$
$key
);
//
颜色变量入栈 - add color variables into array
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
/*
* @todo 生成图表标题 - build title of the chart
*
*/
function
buildtitle()
{
//
设置标题颜色 - set title color
$titlecolor
=
imagecolorallocate(
$this
->
chart
,
$this
->
title[
6
]
,
$this
->
title[
7
]
,
$this
->
title[
8
]);
//
写标题 - write title
imagettftext(
$this
->
chart
,
$this
->
title[
0
]
,
$this
->
title[
1
]
,
$this
->
title[
2
]
,
$this
->
title[
3
]
,
$titlecolor
,
$this
->
title[
4
]
,
$this
->
title[
5
]);
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
/*
* @todo 生成图表说明 - build description of the chart
*
*/
function
builddesc()
{
//
注释位置变量 - image position variables
$dposx
=
$this
->
desc[
0
];
$dposy
=
$this
->
desc[
1
];
//
注释起始坐标 - the start position of the description
$w
=
$this
->
desc[
2
];
//
注释部分宽度 - width of all description
$h
=
$this
->
desc[
3
];
//
注释部分高度 - height of all description
$num
=
count
(
$this
->
param);
//
注释数量 - number of description lines
$perh
=
round
(
$h
/
$num
);
//
每行注释的平均高度 - height of each description line
$margin
=
$this
->
desc[
4
];
//
注释的间距 - margin between square and font
$dsize
=
$this
->
desc[
5
];
//
注释的字体大小 - font size of description
$dangle
=
$this
->
desc[
6
];
//
注释的字体角度 - font display angle of description
$dfontfile
=
$this
->
desc[
7
];
//
注释的字体文件 - font file of description
$dfcolor
=
imagecolorallocate(
$this
->
chart
,
$this
->
desc[
8
]
,
$this
->
desc[
9
]
,
$this
->
desc[
10
]);
//
注释的字体颜色 - font color of description
// 写注释 - write description
$dstring
=
array_keys
(
$this
->
param);
for
(
$i
=
0
;
$i
<
$num
;
$i
++
)
{
//
矩形色块 - colorful square
imagefilledrectangle(
$this
->
chart
,
$dposx
,
$dposy
,
$dposx
+
$dsize
,
$dposy
+
$dsize
,
$this
->
colors[
$i
*
2
]);
//
写文字 - write string
imagettftext(
$this
->
chart
,
$dsize
,
$dangle
,
$dposx
+
$dsize
+
$margin
,
$dposy
+
$dsize
,
$dfcolor
,
$dfontfile
,
$dstring
[
$i
]
.
"
-
"
.
$this
->
param[
$dstring
[
$i
]]);
//
下移 - move down to write next description
$dposy
+=
$perh
;
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
/*
* @todo 生成图形 - build graphics of the chart
*
* @param source $chart
* @param int $d3d
* @param array $param
* @param array $colordefine
*
*/
function
buildgraphics()
{
//
定义生成图形函数 - define make graphics function
// ==================== 饼状图 - pie ====================
if
(
$this
->
type
==
"
pie
"
)
{
//
取得图形位置 - get the positoin of the graphics
$posx
=
$this
->
graphics[
0
];
$posy
=
$this
->
graphics[
1
];
//
取得图形宽度和高度 - get width and height of the graphics
$w
=
$this
->
graphics[
2
];
$h
=
$this
->
graphics[
3
];
//
图形边距 - graphics margin
$margin
=
$this
->
graphics[
4
];
//
3D阴影高度对于椭圆高度的比例 - percent of 3D effect shadow height as the height of the ellipse
$shadow
=
$this
->
graphics[
5
];
//
图形位置变量 - image position variables
$centerx
=
round
(
$posx
+
$w
/
2
+
$margin
);
$centery
=
round
(
$posy
+
$h
/
2
+
$margin
);
//
椭圆中心坐标 - the center of the ellipse
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
// 数据处理 - data process
$total
=
array_sum
(
$this
->
param);
//
取得总数 - get total
$percent
=
array
(
0
);
//
保存比例 - save each percent
$temp
=
0
;
foreach
(
$this
->
param
as
$v
)
{
$temp
+=
360
*
(
$v
/
$total
);
array_push
(
$percent
,
$temp
);
//
保存角度 - save angle
}
//
生成饼状图 - make pie chart
// 生成3D饼状图 - make 3D pie chart
if
(
$this
->
d3d
==
1
)
{
//
3D阴影 - make 3D shadow
for
(
$j
=
(
$centery
*
(
1
+
$shadow
));
$j
>
$centery
;
$j
--
)
{
for
(
$k
=
0
;
$k
<
count
(
$percent
)
-
1
;
$k
++
)
{
imagefilledarc(
$this
->
chart
,
$centerx
,
$j
,
$w
,
$h
,
$percent
[
$k
]
,
$percent
[
$k
+
1
]
,
$this
->
colors[
$k
*
2
+
1
]
,
IMG_ARC_NOFILL);
}
}
}
//
生成平面饼状图 - make 2D pie chart
for
(
$i
=
0
;
$i
<
count
(
$percent
)
-
1
;
$i
++
)
{
imagefilledarc(
$this
->
chart
,
$centerx
,
$centery
,
$w
,
$h
,
$percent
[
$i
]
,
$percent
[
$i
+
1
]
,
$this
->
colors[
$i
*
2
]
,
IMG_ARC_PIE);
}
}
//
==================== 柱状图 - column ====================
elseif
(
$this
->
type
==
"
column
"
)
{
//
取得图形位置 - get the positoin of the graphics
$posx
=
$this
->
graphics[
0
];
$posy
=
$this
->
graphics[
1
];
//
取得图形宽度和高度 - get width and height of the graphics
$w
=
$this
->
graphics[
2
];
$h
=
$this
->
graphics[
3
];
//
图形边距 - graphics margin
$margin
=
$this
->
graphics[
4
];
//
3D阴影高度对于柱体宽度的比例 - percent of 3D effect shadow height as the width of the column
$shadow
=
$this
->
graphics[
5
];
//
图形位置变量 - image position variables
$startx
=
round
(
$posx
+
$margin
);
$starty
=
round
(
$posy
+
$h
-
$margin
);
//
图形左下角坐标 - the left-bottom position of the graphics
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
// 数据处理 - data process
$maxvalue
=
max
(
$this
->
param);
//
取得最大值 - get max value
$num
=
count
(
$this
->
param);
//
取得条柱个数 - get number of columns
$multiple
=
floor
(
log10
(
$maxvalue
));
//
取得数值区间 - get data field
$field
=
floor
(
$maxvalue
/
pow
(
10
,
$multiple
))
+
1
;
//
区间数 - number of unit fields
$fieldnumber
=
$field
>
5
?
$field
:
5
;
//
数据区域数量 - number of data fields
$topvalue
=
$field
*
pow
(
10
,
$multiple
);
//
图表最高点数值 - value of the top
$unitx
=
(
$w
-
$margin
*
2
)
/
$num
;
//
取得x单位长度 - get x unit length
$unity
=
(
$h
-
$margin
*
2
)
/
$fieldnumber
;
//
取得y单位长度 - get y unit length
$shadowheight
=
$unitx
/
2
*
$shadow
;
//
阴影宽度 - shadow height
// 初始化坐标系 - initialize reference frame
if
(
$this
->
d3d
==
1
)
//
3D效果 - 3D effect
{
imagefilledpolygon(
$this
->
chart
,
array
(
$startx
,
$starty
,
$startx
+
$shadowheight
,
$starty
-
$shadowheight
,
$startx
+
$shadowheight
,
$posy
-
$shadowheight
,
$startx
,
$posy
)
,
4
,
$this
->
colors[
0
]);
imageline(
$this
->
chart
,
$startx
+
$shadowheight
,
$starty
-
$shadowheight
,
$startx
+
$shadowheight
,
$posy
-
$shadowheight
,
$this
->
colors[
1
]);
}
imageline(
$this
->
chart
,
$startx
,
$starty
,
$posx
+
$w
,
$starty
,
$this
->
colors[
1
]);
//
x
imageline(
$this
->
chart
,
$startx
,
$starty
,
$startx
,
$posy
,
$this
->
colors[
1
]);
//
y
// 区间标识 - declare fields
for
(
$i
=
0
;
$i
<=
$fieldnumber
;
$i
++
)
{
//
区间标识线 - lines declaring fields
// 3D效果 - 3D effect
if
(
$this
->
d3d
==
1
)
{
imageline(
$this
->
chart
,
$startx
,
$starty
-
$unity
*
$i
,
$startx
+
$shadowheight
,
$starty
-
$unity
*
$i
-
$shadowheight
,
$this
->
colors[
1
]);
imageline(
$this
->
chart
,
$startx
+
$shadowheight
,
$starty
-
$unity
*
$i
-
$shadowheight
,
$posx
+
$w
+
$shadowheight
,
$starty
-
$unity
*
$i
-
$shadowheight
,
$this
->
colors[
1
]);
}
//
2D - 2D
else
{
imageline(
$this
->
chart
,
$startx
,
$starty
-
$unity
*
$i
,
$posx
+
$w
,
$starty
-
$unity
*
$i
,
$this
->
colors[
0
]);
}
//
区间说明 - field description
imagettftext(
$this
->
chart
,
$this
->
desc[
5
]
,
$this
->
desc[
6
]
,
$posx
,
$starty
-
$unity
*
$i
,
$this
->
colors[
0
]
,
$this
->
desc[
7
]
,
$topvalue
/
$fieldnumber
*
$i
);
}
//
生成条柱 - make columns
$paramkeys
=
array_keys
(
$this
->
param);
for
(
$j
=
0
;
$j
<
$num
;
$j
++
)
{
$columnheight
=
(
$h
-
$margin
*
2
)
*
(
$this
->
param[
$paramkeys
[
$j
]]
/
$topvalue
);
//
条柱高度 - column height
$columnx
=
$startx
+
$unitx
/
4
+
$unitx
*
$j
;
//
条柱起点x坐标 - x coordinate of column
imagefilledrectangle(
$this
->
chart
,
$columnx
,
$starty
-
$columnheight
,
$columnx
+
$unitx
/
2
,
$starty
-
1
,
$this
->
colors[
$j
*
2
]);
//
画条柱 - draw columns
// 3D效果 - 3D effect
if
(
$this
->
d3d
==
1
)
{
//
轮廓线 - contour line
imagerectangle(
$this
->
chart
,
$columnx
,
$starty
-
$columnheight
,
$columnx
+
$unitx
/
2
,
$starty
-
1
,
$this
->
colors[
$j
*
2
+
1
]);
//
3D表面 - 3D top
imagefilledpolygon(
$this
->
chart
,
array
(
$columnx
,
$starty
-
$columnheight
,
$columnx
+
$unitx
/
2
,
$starty
-
$columnheight
,
$columnx
+
$unitx
/
2
+
$shadowheight
,
$starty
-
$columnheight
-
$shadowheight
,
$columnx
+
$shadowheight
,
$starty
-
$columnheight
-
$shadowheight
)
,
4
,
$this
->
colors[
$j
*
2
]);
imagepolygon(
$this
->
chart
,
array
(
$columnx
,
$starty
-
$columnheight
,
$columnx
+
$unitx
/
2
,
$starty
-
$columnheight
,
$columnx
+
$unitx
/
2
+
$shadowheight
,
$starty
-
$columnheight
-
$shadowheight
,
$columnx
+
$shadowheight
,
$starty
-
$columnheight
-
$shadowheight
)
,
4
,
$this
->
colors[
$j
*
2
+
1
]);
//
3D阴影 - 3D shadow
imagefilledpolygon(
$this
->
chart
,
array
(
$columnx
+
$unitx
/
2
,
$starty
,
$columnx
+
$unitx
/
2
+
$shadowheight
,
$starty
-
$shadowheight
,
$columnx
+
$unitx
/
2
+
$shadowheight
,
$starty
-
$columnheight
-
$shadowheight
,
$columnx
+
$unitx
/
2
,
$starty
-
$columnheight
)
,
4
,
$this
->
colors[
$j
*
2
+
1
]);
imagepolygon(
$this
->
chart
,
array
(
$columnx
+
$unitx
/
2
,
$starty
,
$columnx
+
$unitx
/
2
+
$shadowheight
,
$starty
-
$shadowheight
,
$columnx
+
$unitx
/
2
+
$shadowheight
,
$starty
-
$columnheight
-
$shadowheight
,
$columnx
+
$unitx
/
2
,
$starty
-
$columnheight
)
,
4
,
$this
->
colors[
$j
*
2
+
1
]);
}
}
}
//
==================== 曲线图 - line ====================
else
{
//
取得图形位置 - get the positoin of the graphics
$posx
=
$this
->
graphics[
0
];
$posy
=
$this
->
graphics[
1
];
//
取得图形宽度和高度 - get width and height of the graphics
$w
=
$this
->
graphics[
2
];
$h
=
$this
->
graphics[
3
];
//
图形边距 - graphics margin
$margin
=
$this
->
graphics[
4
];
//
每个点的直径 - diameter of each point
$pointsize
=
$this
->
graphics[
5
]
*
20
;
//
图形位置变量 - image position variables
$startx
=
round
(
$posx
+
$margin
);
$starty
=
round
(
$posy
+
$h
-
$margin
);
//
图形左下角坐标 - the left-bottom position of the graphics
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
// 数据处理 - data process
$maxvalue
=
max
(
$this
->
param);
//
取得最大值 - get max value
$minvalue
=
min
(
$this
->
param);
//
取得最小值 - get min value
$num
=
count
(
$this
->
param);
//
取得点个数 - get number of points
$fieldnumber
=
$num
;
//
数据区域数量 - number of data fields
$fielddata
=
$maxvalue
-
$minvalue
;
//
取得数据区间 - get data field
$unitdata
=
$fielddata
/
$fieldnumber
;
//
取得单位区间数值 - get unit field data value
$unitx
=
(
$w
-
$margin
*
2
)
/
$num
;
//
取得x单位长度 - get x unit length
$unity
=
(
$h
-
$margin
*
2
)
/
$fieldnumber
;
//
取得y单位长度 - get y unit length
// 初始化坐标系 - initialize reference frame
imageline(
$this
->
chart
,
$startx
,
$starty
,
$posx
+
$w
,
$starty
,
$this
->
colors[
1
]);
//
x
imageline(
$this
->
chart
,
$startx
,
$starty
,
$startx
,
$posy
,
$this
->
colors[
1
]);
//
y
// 区间标识 - declare fields
for
(
$i
=
0
;
$i
<=
$fieldnumber
;
$i
++
)
{
//
标识线 - declaring fields line
imageline(
$this
->
chart
,
$startx
,
$starty
-
$unity
*
$i
,
$posx
+
$w
,
$starty
-
$unity
*
$i
,
$this
->
colors[
0
]);
//
区间说明 - field description
imagettftext(
$this
->
chart
,
$this
->
desc[
5
]
,
$this
->
desc[
6
]
,
$posx
,
$starty
-
$unity
*
$i
,
$this
->
colors[
0
]
,
$this
->
desc[
7
]
,
$minvalue
+
$unitdata
*
$i
);
}
//
生成线条 - make line
$paramkeys
=
array_keys
(
$this
->
param);
$loca
=
array
();
//
保存轨迹的数组 - array to save locas
for
(
$i
=
0
;
$i
<
$num
;
$i
++
)
//
得到轨迹数组 - get loca array
{
//
点x坐标 - x coordinate of the point
$pointx
=
$startx
+
$unitx
*
$i
;
//
点y坐标 - y coordinate of the point
$pointy
=
$starty
-
$unity
*
$fieldnumber
*
((
$this
->
param[
$paramkeys
[
$i
]]
-
$minvalue
)
/
$fielddata
);
//
坐标数据入栈 - push coordinates into array
$loca
[
$i
*
2
]
=
$pointx
;
$loca
[
$i
*
2
+
1
]
=
$pointy
;
//
画点 - draw point
imagefilledellipse(
$this
->
chart
,
$pointx
,
$pointy
,
$pointsize
,
$pointsize
,
$this
->
colors[
$i
*
2
]);
}
$linecolor
=
imagecolorallocate(
$this
->
chart
,
$this
->
title[
6
]
,
$this
->
title[
7
]
,
$this
->
title[
8
]);
//
定义线条颜色 - define line color
for
(
$i
=
0
;
$i
<
$num
+
3
; )
{
//
画线条 - draw line
imageline(
$this
->
chart
,
$loca
[
$i
]
,
$loca
[
$i
+
1
]
,
$loca
[
$i
+
2
]
,
$loca
[
$i
+
3
]
,
$linecolor
);
$i
+=
2
;
}
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
/*
* @todo 输出图像至浏览器或文件 - output the chart image to browser or file
*/
function
outputchart()
{
//
建立图标 - build chart
$this
->
buildchart();
//
写入图形 - build graphics
$this
->
buildgraphics();
//
写入注释 - build description
$this
->
builddesc();
//
写入标题 - build title
$this
->
buildtitle();
//
输出图像 - flush image
imagejpeg(
$this
->
chart
,
$this
->
savefile
,
$this
->
quality);
imagedestroy(
$this
->
chart);
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
?>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
*********************************************************************************
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
演示文件demo
.
php
:
**********************************************************************************
<?
php
//
载入类文件
include
(
'
plchart.php
'
);
//
设置数据数组
$data
=
array
(
"
1月份:11%
"
=>
20
,
"
2月份:16%
"
=>
23
,
"
3月份:19%
"
=>
27
,
"
4月份:13%
"
=>
18
,
"
5月份:18%
"
=>
24
,
"
6月份:12%
"
=>
25
);
//
实例化
$chart
=
new
plchart();
//
设置背景色
// 三个参数为0-255
$chart
->
setbgcolor(
255
,
255
,
255
);
//
设置标题文字
$title
=
<<<
string
图表测试
TEST PIE CHART
string
;
//
设置图表数据
/*
* 第一个参数为图表类型,只能是三个值:pie, column, line
* 第二个参数为是否启用3D显示,0代表不启用,1代表启动
* 第三个参数为图表的宽度
* 第四个参数为图表的高度
* 第五个参数为图表的图片质量,0-100,100为最佳质量,但文件相对也最大
* 第六个参数为原数据数组
*/
$chart
->
setchartdata(
"
line
"
,
0
,
800
,
600
,
100
,
$data
);
//
设置标题
/*
* 第一个参数为标题的字符串
* 第二个参数为标题字体大小
* 第三个参数为标题倾斜角度
* 第四个参数为标题位于图表的起始横坐标
* 第五个参数为标题文字的基准纵坐标
* 第六个参数为标题字体文件
* 最后三个参数为标题字体的RGB颜色
*/
$chart
->
settitle(
$title
,
20
,
0
,
10
,
20
,
'
c:/windows/fonts/simhei.ttf
'
,
0
,
0
,
0
);
//
设置注释
/*
* 第一个参数为注释位于图表的起始横坐标
* 第二个参数为注释位于图表的起始纵坐标
* 第三个参数为注释部分的宽度
* 第四个参数为注释部分的高度
* 第五个参数为注释内容与注释部分边框的间距
* 第六个参数为注释字体大小
* 第七个参数为注释字体倾斜角度
* 第六个参数为注释字体文件
* 最后三个参数为注释字体的RGB颜色
*/
$chart
->
setdesc(
500
,
100
,
200
,
300
,
10
,
18
,
0
,
'
c:/windows/fonts/simhei.ttf
'
,
0
,
0
,
0
);
//
设置图形
/*
* 第一个参数为图形部分位于整个图表的左上角横坐标
* 第二个参数为图形部分位于整个图表的左上角纵坐标
* 第三个参数为图形部分的宽度
* 第四个参数为图形部分的高度
* 第五个参数为图形与图形部分边框的间距(纵坐标标记的宽度)
* 第六个参数为3D阴影的相对比例或是轨迹图中圆点的直径
*/
$chart
->
setgraphics(
10
,
100
,
500
,
500
,
50
,
0.3
);
//
输出图表
$chart
->
outputchart();
//
销毁实例
unset
(
$chart
);
?>