<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. php語言

    PHP實現股票趨勢圖和柱形圖

    時間:2025-01-24 10:46:09 php語言 我要投稿
    • 相關推薦

    PHP實現股票趨勢圖和柱形圖

      文章主要介紹了PHP實現股票趨勢圖和柱形圖,本文效果基于pchart類庫實現,給出實現代碼和效果圖,需要的朋友可以參考下。

      基于強大的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");

      ?>

    【PHP實現股票趨勢圖和柱形圖】相關文章:

    php實現編輯和保存文件的方法08-07

    php的curl實現get和post的代碼07-07

    實現PHP實現限制IP訪問11-11

    PHP實現文件上傳和多文件上傳07-31

    php注冊和登錄界面的實現案例10-15

    PHP就業趨勢201708-19

    Excel2010如何制作柱形圖09-30

    PHP中使用cURL實現Get和Post請求11-13

    PHP實現定時任務的幾種方式和詳解09-13

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人