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

基于强大的类库。

rush:PHP;"> PHP

/*

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');

/*

$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);

$funcname = "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");
?>

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...