加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 02:23:56 所属栏目:PHP教程 来源:网络整理
导读:《PHP实现股票趋势图和柱形图》要点: 本文介绍了PHP实现股票趋势图和柱形图,希望对您有用。如果有疑问,可以联系我们。 PHP实战 基于强大的pchart类库. PHP实战 ?php/* * 股票趋势图和柱形图 * @author: Skiychan developer@zzzzy.com * @created: 02/05/2

《PHP实现股票趋势图和柱形图》要点:
本文介绍了PHP实现股票趋势图和柱形图,希望对您有用。如果有疑问,可以联系我们。

PHP实战基于强大的pchart类库.

PHP实战
<?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("昨日收Pr","股r"),'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,480,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","B"=>178)); //设置柱子的颜色
  $myData->addPoints($times,"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,"B"=>178,"Alpha"=>100);
  }
  //$Palette = array("0"=>array("R"=>74,"Alpha"=>100));
  /* 覆盖画板色
  $barSetting = array(
    "OverrideColors"=>$Palette,);
  $myPicture->drawBarChart($barSetting);
  */
  $myPicture->drawBarChart();
  //是否显示文字
  if ($showtxt) {
    $tips = array(
      "Style"=>LEGEND_NOBORDER,);
    $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");
?>

欢迎参与《PHP实现股票趋势图和柱形图》讨论,分享您的想法,编程之家 52php.cn为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读