首页 > 开发 > PHP > 正文

PHP实现股票趋势图和柱形图

2024-05-04 23:30:59
字体:
来源:转载
供稿:网友

这篇文章主要介绍了PHP实现股票趋势图和柱形图,本文效果基于pchart类库实现,给出实现代码和效果图,需要的朋友可以参考下

基于强大的pchart类库。

 

 
  1. <?php 
  2.  
  3. /* 
  4. * 股票趋势图和柱形图 
  5. * @author: Skiychan <developer@zzzzy.com> 
  6. * @created: 02/05/2015 
  7. */ 
  8.  
  9. include "libs/pData.class.php"
  10. include "libs/pDraw.class.php"
  11. include "libs/pImage.class.php"
  12.  
  13. include "database.php"
  14.  
  15. include "libs/convert.php"
  16. date_default_timezone_set('Asia/Shanghai'); 
  17.  
  18. /* 
  19. * @param type line/other 趋势图/柱形图 默认趋势图 
  20. * @param txt 1/other 显示/不显示 提示文字 默认不显示 
  21. * @param lang hk/cn 繁体中文/简体中文 默认繁体 
  22. * @param id int 股票编号 必填 
  23. * @param min int 最小时间 默认无 
  24. * @param max int 最大时间 默认无 
  25. */ 
  26.  
  27. $type = isset($_GET['type']) ? $_GET['type'] : 'line'
  28. $showtxt = (isset($_GET['txt']) && ($_GET['txt'] == 1)) ? true : false; 
  29.  
  30. //设置语言 
  31. if (isset($_GET['lang'])) { 
  32. $lang = $_GET['lang'] == 'cn' ? 'cn' : 'hk'
  33. else { 
  34. $lang = 'hk'
  35. }  
  36.  
  37. $desc_tip = array
  38. 'hk' => array
  39. 'line' => array("昨日收盤價""股價"), 
  40. 'bar' => "總成交量:" 
  41. ), 
  42. 'cn' => array
  43. 'line' => array("昨日收盘价""股价"), 
  44. 'bar' => "总成交量:" 
  45. ); 
  46.  
  47. $id = isset($_GET['id']) ? (int)$_GET['id'] : 1; //股票编码 
  48.  
  49. //条件 
  50. $wheres = "where stock_no = ".$id
  51.  
  52. //最小时间 
  53. if (isset($_GET['min'])) { 
  54. $wheres .= " and `created` >= ".(int)$_GET['min']; 
  55. //最大时间 
  56. if (isset($_GET['max'])) { 
  57. $wheres .= " and `created` <= ".(int)$_GET['max']; 
  58. $wheres .= " order by created"
  59.  
  60. $sth = $dbh->prepare("SELECT * FROM $tb_name " . $wheres); 
  61. $sth->execute(); 
  62. $results = $sth->fetchAll(PDO::FETCH_ASSOC); 
  63.  
  64. if ($lang == 'hk') { 
  65. $ttf_path = "fonts/zh_hk.ttc"
  66. else { 
  67. $ttf_path = "fonts/zh_cn.ttf"
  68.  
  69. //初始化 
  70. $line2 = array(); //股价 
  71. $bar = array(); //成交量 
  72. $times = array(); //时间 
  73.  
  74. foreach ($results as $keys => $values) : 
  75. $line2[] = $values['current_price']; 
  76. $bar[] = $values['volume']; 
  77.  
  78. //只显示整点的标签 
  79. if ($keys % 4 == 0) { 
  80. $times[] = $values['created']; 
  81. else { 
  82. $times[] = VOID; 
  83.  
  84. endforeach
  85.  
  86. $l2counts = count($line2); 
  87.  
  88. $myData = new pData(); 
  89.  
  90. //如果是线型图 
  91. if ($type == "line") { 
  92.  
  93. //取股票名称  
  94. $stock_sth = $dbh->prepare("SELECT `name` FROM `tbl_stock` WHERE `code` = {$id}"); 
  95. $stock_sth->execute(); 
  96. $stock_info = $stock_sth->fetch(PDO::FETCH_ASSOC); 
  97.  
  98. $func_name = "zhconversion_".$lang
  99. //$stock_name = $func_name($stock_info['name']); 
  100. $stock_name = "某某公司"
  101.  
  102. //取出最值 
  103. $sql = "SELECT MIN(`current_price`) xiao, MAX(`current_price`) da FROM $tb_name $wheres"
  104. foreach ($dbh->query($sql, PDO::FETCH_ASSOC) as $row) { 
  105. $bottom = (int)$row['xiao'] - 2; 
  106. $top = (int)$row['da'] + 2; 
  107.  
  108. //昨日收盘价 
  109. $l1s = array(); 
  110. for ($i = 1; $i <= $l2counts$i++) { 
  111. $l1s[] = 130; 
  112.  
  113. $myData->addPoints($l1s"Line1"); 
  114. $myData->addPoints($line2"Line2"); 
  115.  
  116. $myData->setPalette("Line1",array("R"=>51,"G"=>114,"B"=>178)); 
  117. $myData->setPalette("Line2",array("R"=>0,"G"=>255,"B"=>0)); 
  118.  
  119. $myData->setAxisPosition(0, AXIS_POSITION_RIGHT); 
  120. $myData->addPoints($times"Times"); 
  121. $myData->setSerieDescription("Times","Time"); 
  122. $myData->setAbscissa("Times"); 
  123. $myData->setXAxisDisplay(AXIS_FORMAT_TIME,"H:i"); 
  124.  
  125.  
  126. $myPicture = new pImage(480, 300, $myData); 
  127.  
  128. //设置默认字体 
  129. $myPicture->setFontProperties(array("FontName" => "fonts/en_us.ttf""FontSize" => 6)); 
  130.  
  131. //背景颜色 
  132. //$Settings = array("StartR"=>219, "StartG"=>231, "StartB"=>139, "EndR"=>1, "EndG"=>138, "EndB"=>68, "Alpha"=>50); 
  133. //$myPicture->drawGradientArea(0,0,480,300,DIRECTION_VERTICAL,$Settings); 
  134.  
  135. //画格子和标签 
  136. $myPicture->setGraphArea(10, 40, 440, 260); 
  137. $AxisBoundaries = array(0 => array("Min" => $bottom"Max" => $top)); 
  138. $Settings = array
  139. "Mode" => SCALE_MODE_MANUAL, 
  140. "GridR" => 200, 
  141. "GridG" => 200, 
  142. "GridB" => 200, 
  143. "XMargin" => 0, 
  144. "YMargin" => 0, 
  145. //"DrawXLines" => false, 
  146. "GridTicks" => 3, //格子密度 
  147. "ManualScale" => $AxisBoundaries
  148. ); 
  149. $myPicture->drawScale($Settings); 
  150.  
  151. //画线 
  152. /* 
  153. $line_arr = array( 
  154. "ForceColor" => TRUE, 
  155. "ForceR" => 0, 
  156. "ForceG" => 0, 
  157. "ForceB" => 255); 
  158. $myPicture->drawLineChart($line_arr); */ 
  159. $myPicture->drawLineChart(); 
  160.  
  161. //设置Line1为无效,再画底色 
  162. $myData->setSerieDrawable("Line1",FALSE); 
  163.  
  164. //画区域底线 
  165. $area_arr = array
  166. "ForceTransparency"=>15, //透明度 
  167. ); 
  168. $myPicture->drawAreaChart($area_arr); 
  169.  
  170. //是否显示文字 
  171. if ($showtxt) { 
  172. //标题 
  173. $myPicture->drawText(200,30,$stock_name,array("FontName"=>$ttf_path"FontSize"=>11,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));  
  174.  
  175. //设置Line1为有效 
  176. $myData->setSerieDrawable("Line1",TRUE); 
  177. $myData->setSerieDescription("Line1",$desc_tip[$lang]['line'][0]); 
  178. $myData->setSerieDescription("Line2",$desc_tip[$lang]['line'][1]); 
  179.  
  180. $myPicture->setFontProperties(array("FontName" => $ttf_path,"FontSize"=>8)); 
  181. $tips = array
  182. "Style"=>LEGEND_NOBORDER, 
  183. "Mode"=>LEGEND_HORIZONTAL, 
  184. "FontR"=>0,"FontG"=>0,"FontB"=>0, 
  185. ); 
  186. $myPicture->drawLegend(20,26,$tips); 
  187.  
  188. //柱形图 
  189. else { 
  190.  
  191. $myData->addPoints($bar"Bar"); 
  192. $myData->setPalette("Bar",array("R"=>51,"G"=>114,"B"=>178)); //设置柱子的颜色 
  193. $myData->addPoints($times"Times"); 
  194. $myData->setSerieDescription("Times","Time"); 
  195. $myData->setAbscissa("Times"); 
  196. $myData->setXAxisDisplay(AXIS_FORMAT_TIME,"H:i"); 
  197.  
  198. $myPicture = new pImage(480, 200, $myData); 
  199.  
  200. //设置默认字体 
  201. $myPicture->setFontProperties(array("FontName" => "fonts/en_us.ttf""FontSize"=>6)); 
  202. $myPicture->Antialias = FALSE; 
  203.  
  204. $myPicture->setGraphArea(50,20,450,180); 
  205.  
  206. //网格及坐标 
  207. $scaleSettings = array
  208. "Mode" => SCALE_MODE_START0, 
  209. "GridR"=>200, 
  210. "GridG"=>200, 
  211. "GridB"=>200); 
  212. $myPicture->drawScale($scaleSettings); 
  213.  
  214. /* 
  215. $Palette = array(); 
  216. for ($i = 0; $i <= $l2counts; $i++) { 
  217. $Palette[$i] = array("R"=>74,"G"=>114,"B"=>178,"Alpha"=>100); 
  218. } 
  219.  
  220. //$Palette = array("0"=>array("R"=>74,"G"=>114,"B"=>178,"Alpha"=>100)); 
  221.  
  222. /* 覆盖画板色 
  223. $barSetting = array( 
  224. "OverrideColors"=>$Palette, 
  225. ); 
  226. $myPicture->drawBarChart($barSetting); 
  227. */ 
  228.  
  229. $myPicture->drawBarChart(); 
  230.  
  231. //是否显示文字 
  232. if ($showtxt) { 
  233. $tips = array
  234. "Style"=>LEGEND_NOBORDER, 
  235. "Mode"=>LEGEND_HORIZONTAL, 
  236. "FontR"=>0,"FontG"=>0,"FontB"=>0, 
  237. ); 
  238.  
  239. $myPicture->setFontProperties(array("FontName" => $ttf_path,"FontSize"=>9)); 
  240. $alls = 0; //总成交量初始化 
  241. foreach ($bar as $value) { 
  242. $alls += $value
  243. $myData->setSerieDescription("Bar"$desc_tip[$lang]['bar'].$alls); 
  244.  
  245. $myPicture->drawLegend(300,9,$tips); 
  246.  
  247.  
  248. $myPicture->stroke(); 
  249. //$myPicture->autoOutput("image.png"); 
  250.  
  251. //保存日志 
  252. //file_put_contents("log.txt", json_encode($myData) . "/n"); 
  253. ?> 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表