欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2015年02月07日 16:16:30   投稿:junjie  
這篇文章主要介紹了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);

//畫區(qū)域底線
  $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實現開心消消樂的算法示例

    開心消消樂應該對大家來說都不陌生吧,下面這篇文章主要給大家介紹了關于如何利用PHP實現開心消消樂算法的相關資料,文中將需求和示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-10-10
  • 解析在PHP中使用全局變量的幾種方法

    解析在PHP中使用全局變量的幾種方法

    本篇文章是對在PHP中使用全局變量的幾種方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • 淺析PHP Socket技術

    淺析PHP Socket技術

    使用并發(fā)起一個阻塞式(block)連接,即服務器如果不返回數據流,則一直保持連接狀態(tài),一旦有數據流傳入,取得內容后就立即斷開連接
    2013-08-08
  • PHP中讓json_encode不自動轉義斜杠“/”的方法

    PHP中讓json_encode不自動轉義斜杠“/”的方法

    這篇文章主要給大家分享了PHP中如何讓json_encode不自動轉義斜杠“/”的兩種方法,文中給出了詳細的示例代碼,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-02-02
  • PHP基于pdo的數據庫操作類【可支持mysql、sqlserver及oracle】

    PHP基于pdo的數據庫操作類【可支持mysql、sqlserver及oracle】

    這篇文章主要介紹了PHP基于pdo的數據庫操作類,可實現基本的數據庫連接、增刪改查、關閉連接等操作,還支持針對mysql、sqlserver及oracle等數據庫的操作,需要的朋友可以參考下
    2018-05-05
  • php抽象類和接口知識點整理總結

    php抽象類和接口知識點整理總結

    這篇文章主要介紹了php抽象類和接口知識點,整理總結了php抽象類與接口的概念、原理、操作技巧及相關使用注意事項,需要的朋友可以參考下
    2019-08-08
  • PHP函數spl_autoload_register()用法和__autoload()介紹

    PHP函數spl_autoload_register()用法和__autoload()介紹

    又是框架沖突導致__autoload()失效,用spl_autoload_register()重構一下,問題解決
    2012-02-02
  • PHP中函數rand和mt_rand的區(qū)別比較

    PHP中函數rand和mt_rand的區(qū)別比較

    mt_rand() 比rand() 快四倍,很多老的 libc 的隨機數發(fā)生器具有一些不確定和未知的特性而且很慢。PHP 的 rand() 函數默認使用 libc 隨機數發(fā)生器。mt_rand() 函數是非正式用來替換它的。
    2012-12-12
  • PHP global全局變量經典應用與注意事項分析【附$GLOBALS用法對比】

    PHP global全局變量經典應用與注意事項分析【附$GLOBALS用法對比】

    這篇文章主要介紹了PHP global全局變量經典應用與注意事項,結合實例形式分析了php中global全局變量的功能、使用方法及相關操作注意事項,并附帶了$GLOBALS用法作為對比,需要的朋友可以參考下
    2019-07-07
  • php構造方法中析構方法在繼承中的表現

    php構造方法中析構方法在繼承中的表現

    這篇文章主要為大家詳細介紹了php構造方法中析構方法在繼承中的表現,感興趣的小伙伴們可以參考一下
    2016-04-04

最新評論