基于强大的pchart类库。
<?php /* * 股票趋势图和柱形图 * @author: Skiychan <developer@zzzzy.com> * @created: 02/05/2015 */ include \"libs/pData.class.php\"; include \"libs/pDraw.class.php\"; include \"libs/pImage.class.php\"; include \"database.php\"; include \"libs/convert.php\"; date_default_timezone_set(\'Asia/Shanghai\'); /* * @param type line/other 趋势图/柱形图 默认趋势图 * @param txt 1/other 显示/不显示 提示文字 默认不显示 * @param lang hk/cn 繁体中文/简体中文 默认繁体 * @param id int 股票编号 必填 * @param min int 最小时间 默认无 * @param max int 最大时间 默认无 */ $type = isset($_GET[\'type\']) ? $_GET[\'type\'] : \'line\'; $showtxt = (isset($_GET[\'txt\']) && ($_GET[\'txt\'] == 1)) ? true : false; //设置语言 if (isset($_GET[\'lang\'])) { $lang = $_GET[\'lang\'] == \'cn\' ? \'cn\' : \'hk\'; } else { $lang = \'hk\'; } $desc_tip = array( \'hk\' => array( \'line\' => array(\"昨日收盤價\", \"股價\"), \'bar\' => \"總成交量:\" ), \'cn\' => array( \'line\' => array(\"昨日收盘价\", \"股价\"), \'bar\' => \"总成交量:\" ) ); $id = isset($_GET[\'id\']) ? (int)$_GET[\'id\'] : 1; //股票编码 //条件 $wheres = \"where stock_no = \".$id; //最小时间 if (isset($_GET[\'min\'])) { $wheres .= \" and `created` >= \".(int)$_GET[\'min\']; } //最大时间 if (isset($_GET[\'max\'])) { $wheres .= \" and `created` <= \".(int)$_GET[\'max\']; } $wheres .= \" order by created\"; $sth = $dbh->prepare(\"SELECT * FROM $tb_name \" . $wheres); $sth->execute(); $results = $sth->fetchAll(PDO::FETCH_ASSOC); if ($lang == \'hk\') { $ttf_path = \"fonts/zh_hk.ttc\"; } else { $ttf_path = \"fonts/zh_cn.ttf\"; } //初始化 $line2 = array(); //股价 $bar = array(); //成交量 $times = array(); //时间 foreach ($results as $keys => $values) : $line2[] = $values[\'current_price\']; $bar[] = $values[\'volume\']; //只显示整点的标签 if ($keys % 4 == 0) { $times[] = $values[\'created\']; } else { $times[] = VOID; } endforeach; $l2counts = count($line2); $myData = new pData(); //如果是线型图 if ($type == \"line\") { //取股票名称 $stock_sth = $dbh->prepare(\"SELECT `name` FROM `tbl_stock` WHERE `code` = {$id}\"); $stock_sth->execute(); $stock_info = $stock_sth->fetch(PDO::FETCH_ASSOC); $func_name = \"zhconversion_\".$lang; //$stock_name = $func_name($stock_info[\'name\']); $stock_name = \"某某公司\"; //取出最值 $sql = \"SELECT MIN(`current_price`) xiao, MAX(`current_price`) da FROM $tb_name $wheres\"; foreach ($dbh->query($sql, PDO::FETCH_ASSOC) as $row) { $bottom = (int)$row[\'xiao\'] - 2; $top = (int)$row[\'da\'] + 2; } //昨日收盘价 $l1s = array(); for ($i = 1; $i <= $l2counts; $i++) { $l1s[] = 130; } $myData->addPoints($l1s, \"Line1\"); $myData->addPoints($line2, \"Line2\"); $myData->setPalette(\"Line1\",array(\"R\"=>51,\"G\"=>114,\"B\"=>178)); $myData->setPalette(\"Line2\",array(\"R\"=>0,\"G\"=>255,\"B\"=>0)); $myData->setAxisPosition(0, AXIS_POSITION_RIGHT); $myData->addPoints($times, \"Times\"); $myData->setSerieDescription(\"Times\",\"Time\"); $myData->setAbscissa(\"Times\"); $myData->setXAxisDisplay(AXIS_FORMAT_TIME,\"H:i\"); $myPicture = new pImage(480, 300, $myData); //设置默认字体 $myPicture->setFontProperties(array(\"FontName\" => \"fonts/en_us.ttf\", \"FontSize\" => 6)); //背景颜色 //$Settings = array(\"StartR\"=>219, \"StartG\"=>231, \"StartB\"=>139, \"EndR\"=>1, \"EndG\"=>138, \"EndB\"=>68, \"Alpha\"=>50); //$myPicture->drawGradientArea(0,0,480,300,DIRECTION_VERTICAL,$Settings); //画格子和标签 $myPicture->setGraphArea(10, 40, 440, 260); $AxisBoundaries = array(0 => array(\"Min\" => $bottom, \"Max\" => $top)); $Settings = array( \"Mode\" => SCALE_MODE_MANUAL, \"GridR\" => 200, \"GridG\" => 200, \"GridB\" => 200, \"XMargin\" => 0, \"YMargin\" => 0, //\"DrawXLines\" => false, \"GridTicks\" => 3, //格子密度 \"ManualScale\" => $AxisBoundaries, ); $myPicture->drawScale($Settings); //画线 /* $line_arr = array( \"ForceColor\" => TRUE, \"ForceR\" => 0, \"ForceG\" => 0, \"ForceB\" => 255); $myPicture->drawLineChart($line_arr); */ $myPicture->drawLineChart(); //设置Line1为无效,再画底色 $myData->setSerieDrawable(\"Line1\",FALSE); //画区域底线 $area_arr = array( \"ForceTransparency\"=>15, //透明度 ); $myPicture->drawAreaChart($area_arr); //是否显示文字 if ($showtxt) { //标题 $myPicture->drawText(200,30,$stock_name,array(\"FontName\"=>$ttf_path, \"FontSize\"=>11,\"Align\"=>TEXT_ALIGN_BOTTOMMIDDLE)); //设置Line1为有效 $myData->setSerieDrawable(\"Line1\",TRUE); $myData->setSerieDescription(\"Line1\",$desc_tip[$lang][\'line\'][0]); $myData->setSerieDescription(\"Line2\",$desc_tip[$lang][\'line\'][1]); $myPicture->setFontProperties(array(\"FontName\" => $ttf_path,\"FontSize\"=>8)); $tips = array( \"Style\"=>LEGEND_NOBORDER, \"Mode\"=>LEGEND_HORIZONTAL, \"FontR\"=>0,\"FontG\"=>0,\"FontB\"=>0, ); $myPicture->drawLegend(20,26,$tips); } //柱形图 } else { $myData->addPoints($bar, \"Bar\"); $myData->setPalette(\"Bar\",array(\"R\"=>51,\"G\"=>114,\"B\"=>178)); //设置柱子的颜色 $myData->addPoints($times, \"Times\"); $myData->setSerieDescription(\"Times\",\"Time\"); $myData->setAbscissa(\"Times\"); $myData->setXAxisDisplay(AXIS_FORMAT_TIME,\"H:i\"); $myPicture = new pImage(480, 200, $myData); //设置默认字体 $myPicture->setFontProperties(array(\"FontName\" => \"fonts/en_us.ttf\", \"FontSize\"=>6)); $myPicture->Antialias = FALSE; $myPicture->setGraphArea(50,20,450,180); //网格及坐标 $scaleSettings = array( \"Mode\" => SCALE_MODE_START0, \"GridR\"=>200, \"GridG\"=>200, \"GridB\"=>200); $myPicture->drawScale($scaleSettings); /* $Palette = array(); for ($i = 0; $i <= $l2counts; $i++) { $Palette[$i] = array(\"R\"=>74,\"G\"=>114,\"B\"=>178,\"Alpha\"=>100); } //$Palette = array(\"0\"=>array(\"R\"=>74,\"G\"=>114,\"B\"=>178,\"Alpha\"=>100)); /* 覆盖画板色 $barSetting = array( \"OverrideColors\"=>$Palette, ); $myPicture->drawBarChart($barSetting); */ $myPicture->drawBarChart(); //是否显示文字 if ($showtxt) { $tips = array( \"Style\"=>LEGEND_NOBORDER, \"Mode\"=>LEGEND_HORIZONTAL, \"FontR\"=>0,\"FontG\"=>0,\"FontB\"=>0, ); $myPicture->setFontProperties(array(\"FontName\" => $ttf_path,\"FontSize\"=>9)); $alls = 0; //总成交量初始化 foreach ($bar as $value) { $alls += $value; } $myData->setSerieDescription(\"Bar\", $desc_tip[$lang][\'bar\'].$alls); $myPicture->drawLegend(300,9,$tips); } } $myPicture->stroke(); //$myPicture->autoOutput(\"image.png\"); //保存日志 //file_put_contents(\"log.txt\", json_encode($myData) . \"\\n\"); ?>
本文地址:https://www.stayed.cn/item/25253
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我