如何将mysql数据库中的数据画成饼状图,求代码。

 我来答
稀有气体90
2014-07-08
知道答主
回答量:1
采纳率:0%
帮助的人:1356
展开全部
<?
//
参数以
a
为参数名传入,
a
的文本形态应该是用“
,
”分割的若干数字连接的字符串

//
这里首先判断
a
是否存在

if($_GET["a"]=="") die("0");
//
将得到的数据分解,存入数组
$shuju


$shuju=split(",",$_GET["a"]);
//
再次判断数据的合法性,返回错误代码

if(count($shuju)==0) die("2");
//
定义整个图形的宽度和高度

//
读者可以根据需要修改这两个变量的值

$tukuan=300;
$tugao=150;

//
定义一个数组,用来存放每一个色块的角度范围

$jiaodu = array();
//
定义存贮数据和的变量

$total=0;
//
遍历数组求和

for ($i = 0; $i < count($shuju); $i++) {

if(!is_numeric($shuju[$i])) die("1");

$total+=$shuju[$i];
}
//
再次遍历,计算色块角度并存入数组

for ($i = 0; $i < count($shuju); $i++) {

array_push ($jiaodu, round(360*$shuju[$i]/$total));
}

//
创建图像

$image = imagecreate($tukuan, $tugao);
//
定义一个灰色背景色
,
这个颜色其实就是大家很熟悉的页面色系
16
进制数字表示的
#EEEEEE
$white = imagecolorallocate($image, 0xEE, 0xEE, 0xEE);

//
再定义
10
对深浅对应的彩色,存入二维数组

$yanse = array(

array(

imagecolorallocate($image, 0x97, 0xbd, 0x00),

imagecolorallocate($image, 0x00, 0x99, 0x00),

imagecolorallocate($image, 0xcc, 0x33, 0x00),

imagecolorallocate($image, 0xff, 0xcc, 0x00),

imagecolorallocate($image, 0x33, 0x66, 0xcc),

imagecolorallocate($image, 0x33, 0xcc, 0x33),

imagecolorallocate($image, 0xff, 0x99, 0x33),

imagecolorallocate($image, 0xcc, 0xcc, 0x99),

imagecolorallocate($image, 0x99, 0xcc, 0x66),

imagecolorallocate($image, 0x66, 0xff, 0x99)

),

array(

imagecolorallocate($image, 0x4f, 0x66, 0x00),

imagecolorallocate($image, 0x00, 0x33, 0x00),

imagecolorallocate($image, 0x48, 0x10, 0x00),

imagecolorallocate($image, 0x7d, 0x64, 0x00),

imagecolorallocate($image, 0x17, 0x30, 0x64),

imagecolorallocate($image, 0x1a, 0x6a, 0x1a),

imagecolorallocate($image, 0x97, 0x4b, 0x00),

imagecolorallocate($image, 0x78, 0x79, 0x3c),

imagecolorallocate($image, 0x55, 0x7e, 0x27),

imagecolorallocate($image, 0x00, 0x93, 0x37)

)
);

//
由下至上画
10
个像素高的深色饼图,作为阴影

$yuanxin_x=$tukuan/
2;
for ($h = $tugao/
2+5; $h > $tugao/
2-5; $h--) {

$kaishi=0;

$jieshu=0;

for ($i = 0; $i < count($shuju); $i++) {

$kaishi=$kaishi+0;

$jieshu=$kaishi+$jiaodu[$i];

$yanse_i=fmod($i,10);

imagefilledarc($image,$yuanxin_x,$h,$tukuan,$tugao-20,$kaishi,$jieshu,$yanse[1][$yanse_i],IM
G_ARC_PIE);

$kaishi+=$jiaodu[$i];

$jieshu+=$jiaodu[$i];

}
}

//
在最高处
(
也就是
$h
最小时
)
画一个浅色饼图,
这个浅色图跟先画上的深色饼图就能产生立
体效果了

for ($i = 0; $i < count($shuju); $i++) {

$kaishi=$kaishi+0;

$jieshu=$kaishi+$jiaodu[$i];

$yanse_i=fmod($i,10);

imagefilledarc($image,
$yuanxin_x,
$h,
$tukuan,
$tugao-20,
$kaishi,
$jieshu,
$yanse[0][$yanse_i], IMG_ARC_PIE);

$kaishi+=$jiaodu[$i];

$jieshu+=$jiaodu[$i];
}
//
设定文件头

header('Content-type: image/png');
//
输出图像

imagepng($image);
//
释放资源

imagedestroy($image);
?>

使用方法

在需要显示图像的位置插入如下代码

<img src="bing_img.php?a=3,2,3,4"/>
a
的文本格式是由“
,
”连接的若干个数据的字符串,
get
方式传入。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
九方清韩馀9N
2014-07-03 · TA获得超过134个赞
知道答主
回答量:221
采纳率:0%
帮助的人:87万
展开全部
没学过 这个还有代码?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阿里服务器租用
2014-07-03 · TA获得超过483个赞
知道小有建树答主
回答量:459
采纳率:50%
帮助的人:213万
展开全部
用highcharts Javascript即可,百度highcharts第一个就是
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式