php手机网页实现k线图,javascript,html5_关于echarts的K线图模拟是如何实现的?,javascript,html5 - phpStudy...

关于echarts的K线图模拟是如何实现的?

本人接到一个对 EchartsK 线图的模拟任务,可惜对 JS 实在烂的无法直视,所以希望大家看看如何完成对 K 线图中的蜡状图的模拟。

这里大概有五组数据,分别是 K 线图、MA5、MA10、MA20、MA30,但主要不会对 K 线图的数据进行模拟.虽然知道 K 线图的数据由四个数据组成,但就是写不出来模拟央视..

模拟的数据如下:

var data0 = option.series[0].data;

var data1 = option.series[1].data;

var data2 = option.series[2].data;

var data3 = option.series[3].data;

data0.shift();

data0.push(2200+Math.random() * 100);//这里不知道该怎么写

data1.shift();

data1.push(2200+Math.random() * 100);

data2.shift();

data2.push(2200+Math.random() * 100);

data3.shift();

data3.push(2200+Math.random() * 100);

另外也希望好心人讲解下这个X轴xAxis是如何实现原理的

/*option.xAxis[0].data.shift();

option.xAxis[0].data.push(axisData);

最后附上完整代码,感激不尽:

var dom = document.getElementById("container");

var myChart = echarts.init(dom);

var app = {};

// 数据意义:开盘(open),收盘(close),最低(lowest),最高(highest)

var data0 = splitData([

['2013/1/24', 2320.26,2320.26,2287.3,2362.94],

['2013/1/25', 2300,2291.3,2288.26,2308.38],

['2013/1/28', 2295.35,2346.5,2295.35,2346.92],

['2013/1/29', 2347.22,2358.98,2337.35,2363.8],

['2013/1/30', 2360.75,2382.48,2347.89,2383.76],

['2013/1/31', 2383.43,2385.42,2371.23,2391.82],

['2013/2/1', 2377.41,2419.02,2369.57,2421.15],

['2013/2/4', 2425.92,2428.15,2417.58,2440.38],

['2013/2/5', 2411,2433.13,2403.3,2437.42],

['2013/2/6', 2432.68,2434.48,2427.7,2441.73],

['2013/3/25', 2334.74,2326.72,2319.91,2344.89],

['2013/3/26', 2318.58,2297.67,2281.12,2319.99],

['2013/3/27', 2299.38,2301.26,2289,2323.48],

['2013/3/28', 2273.55,2236.3,2232.91,2273.55],

['2013/3/29', 2238.49,2236.62,2228.81,2246.87],

['2013/4/1', 2229.46,2234.4,2227.31,2243.95],

['2013/4/2', 2234.9,2227.74,2220.44,2253.42],

['2013/4/3', 2232.69,2225.29,2217.25,2241.34],

['2013/4/8', 2196.24,2211.59,2180.67,2212.59],

['2013/4/9', 2215.47,2225.77,2215.47,2234.73],

['2013/4/10', 2224.93,2226.13,2212.56,2233.04],

['2013/4/11', 2236.98,2219.55,2217.26,2242.48],

['2013/4/12', 2218.09,2206.78,2204.44,2226.26],

['2013/4/15', 2199.91,2181.94,2177.39,2204.99],

['2013/4/16', 2169.63,2194.85,2165.78,2196.43],

['2013/4/17', 2195.03,2193.8,2178.47,2197.51],

['2013/4/18', 2181.82,2197.6,2175.44,2206.03],

['2013/4/19', 2201.12,2244.64,2200.58,2250.11],

['2013/4/22', 2236.4,2242.17,2232.26,2245.12],

['2013/4/23', 2242.62,2184.54,2182.81,2242.62],

['2013/4/24', 2187.35,2218.32,2184.11,2226.12],

['2013/4/25', 2213.19,2199.31,2191.85,2224.63],

['2013/4/26', 2203.89,2177.91,2173.86,2210.58],

['2013/5/2', 2170.78,2174.12,2161.14,2179.65],

['2013/5/3', 2179.05,2205.5,2179.05,2222.81],

['2013/5/6', 2212.5,2231.17,2212.5,2236.07],

['2013/5/7', 2227.86,2235.57,2219.44,2240.26],

['2013/5/8', 2242.39,2246.3,2235.42,2255.21],

['2013/5/9', 2246.96,2232.97,2221.38,2247.86],

['2013/5/10', 2228.82,2246.83,2225.81,2247.67],

['2013/5/13', 2247.68,2241.92,2231.36,2250.85],

['2013/5/14', 2238.9,2217.01,2205.87,2239.93],

['2013/5/15', 2217.09,2224.8,2213.58,2225.19],

['2013/5/16', 2221.34,2251.81,2210.77,2252.87],

['2013/5/17', 2249.81,2282.87,2248.41,2288.09],

['2013/5/20', 2286.33,2299.99,2281.9,2309.39],

['2013/5/21', 2297.11,2305.11,2290.12,2305.3],

['2013/5/22', 2303.75,2302.4,2292.43,2314.18],

['2013/5/23', 2293.81,2275.67,2274.1,2304.95],

['2013/5/24', 2281.45,2288.53,2270.25,2292.59],

['2013/5/27', 2286.66,2293.08,2283.94,2301.7],

['2013/5/28', 2293.4,2321.32,2281.47,2322.1],

['2013/5/29', 2323.54,2324.02,2321.17,2334.33],

['2013/5/30', 2316.25,2317.75,2310.49,2325.72],

['2013/5/31', 2320.74,2300.59,2299.37,2325.53],

['2013/6/3', 2300.21,2299.25,2294.11,2313.43],

['2013/6/4', 2297.1,2272.42,2264.76,2297.1],

['2013/6/5', 2270.71,2270.93,2260.87,2276.86],

['2013/6/6', 2264.43,2242.11,2240.07,2266.69],

['2013/6/7', 2242.26,2210.9,2205.07,2250.63],

['2013/6/13', 2190.1,2148.35,2126.22,2190.1]

]);

function splitData(rawData) {

var categoryData = [];

var values = []

for (var i = 0; i < rawData.length; i++) {

categoryData.push(rawData[i].splice(0, 1)[0]);

values.push(rawData[i])

}

return {

categoryData: categoryData,

values: values

};

}

function calculateMA(dayCount) {

var result = [];

for (var i = 0, len = data0.values.length; i < len; i++) {

if (i < dayCount) {

result.push('-');

continue;

}

var sum = 0;

for (var j = 0; j < dayCount; j++) {

sum += data0.values[i - j][1];

}

result.push(sum / dayCount);

}

return result;

}

option = null;

option = {

title: {

text: '上证指数',

left: 0

},

tooltip: {

trigger: 'axis',

axisPointer: {

type: 'line'

}

},

legend: {

data: ['日K', 'MA5', 'MA10', 'MA20', 'MA30']

},

grid: {

left: '10%',

right: '10%',

bottom: '15%'

},

xAxis: {

type: 'category',

data: data0.categoryData,

scale: true,

boundaryGap : false,

axisLine: {onZero: false},//X/Y轴O刻度是否重合

splitLine: {show: false},//是否显示分割线

splitNumber: 20,//分割数量

min: 'dataMin',//坐标轴的最小刻目

max: 'dataMax'

},

yAxis: {

scale: true,

splitArea: {

show: true

}

},

dataZoom: [

{

type: 'inside',

start: 50,

end: 100

},

{

show: true,

type: 'slider',

y: '90%',

start: 50,

end: 100

}

],

series: [

{

name: '日K',

type: 'candlestick',

data: data0.values,

markPoint: {

label: {//标注文字

normal: {

formatter: function (param) {

return param != null ? Math.round(param.value) : ''; //判断param是不是有值,如果有,返回四舍五入后的值,如果没有就返回空

}

}

},

data: [

{

name: 'XX标点',

coord: ['2013/5/31', 2300],

value: 2300,

itemStyle: {

normal: {color: 'rgb(41,60,85)'}

}

},

{

name: 'highest value',

type: 'max',

valueDim: 'highest'

},

{

name: 'lowest value',

type: 'min',

valueDim: 'lowest'

},

{

name: 'average value on close',

type: 'average',

valueDim: 'close'

}

],

tooltip: {

formatter: function (param) {

return param.name + '
' + (param.data.coord || '');

}

}

},

markLine: {

symbol: ['none', 'none'],

data: [

[

{

name: 'from lowest to highest',

type: 'min',

valueDim: 'lowest',

symbol: 'circle',

symbolSize: 10,

label: {

normal: {show: false},

emphasis: {show: false}

}

},

{

type: 'max',

valueDim: 'highest',

symbol: 'circle',

symbolSize: 10,

label: {

normal: {show: false},

emphasis: {show: false}

}

}

],

{

name: 'min line on close',

type: 'min',

valueDim: 'close'

},

{

name: 'max line on close',

type: 'max',

valueDim: 'close'

}

]

}

},

{

name: 'MA5',

type: 'line',

data: calculateMA(5),

smooth: true,

lineStyle: {

normal: {opacity: 0.5}

}

},

{

name: 'MA10',

type: 'line',

data: calculateMA(10),

smooth: true,

lineStyle: {

normal: {opacity: 0.5}

}

},

{

name: 'MA20',

type: 'line',

data: calculateMA(20),

smooth: true,

lineStyle: {

normal: {opacity: 0.5}

}

},

{

name: 'MA30',

type: 'line',

data: calculateMA(30),

smooth: true,

lineStyle: {

normal: {opacity: 0.5}

}

},

]

};

clearInterval(app.timeTicket);

app.count = 11;

app.timeTicket = setInterval(function (){

axisData = (new Date()).toLocaleTimeString().replace(/^\D*/,'');

var data0 = option.series[0].data;

var data1 = option.series[1].data;

var data2 = option.series[2].data;

var data3 = option.series[3].data;

data0.shift();

data0.push(2200+Math.random() * 100);

data1.shift();

data1.push(2200+Math.random() * 100);

data2.shift();

data2.push(2200+Math.random() * 100);

data3.shift();

data3.push(2200+Math.random() * 100);

/*option.xAxis[0].data.shift();

option.xAxis[0].data.push(axisData);

option.xAxis[1].data.shift();

option.xAxis[1].data.push(app.count++);*/

myChart.setOption(option);

}, 2000);

;

if (option && typeof option === "object") {

var startTime = +new Date();

myChart.setOption(option, true);

var endTime = +new Date();

var updateTime = endTime - startTime;

console.log("Time used:", updateTime);

}

相关阅读:

python构造嵌套字典

swipefelt 触发两次

php dom处理title中非UTF-8导致乱码

原生javascript怎样获取box的width,不包括box的边框

phpmyadmin error #1054 Unknown column 'devison' in 'order clause'

Linux安装gcc的纠结

导航栏如何默认选中?如何根据当前页面浏览位置,导航栏自动选中?

iOS的Header file怎么用?

系统集成中的一个问题

linux 如何同步github到本地啊?

stream_set_timeout 设置超时无效 fread依然超时

js 字符串 第三个“/” 换行

为何有的环境下,zsh 不能打印出单行字符串?

socketserver+ssl+daemon客服端连接问题!

Android 豌豆荚卸载后弹网页做反馈统计如何实现

markdown怎么插入本地图片?

angular能够获取视频和音频地址,但是不能播放,怎么解决?

spring mvc 怎么同时配置 /a/{b} 和 /a/{b}.{c} 这两个 RequestMapping

mysqldump: Couldn't find table: ";"是怎么回事?

求教Yii2里的identity

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
html5和c++开源 K线工具, Create interactive charts easily for your web projects. Used by tens of thousands of developers and 61 out of the world's 100 largest companies, Highcharts is the simplest yet most flexible charting API on the market. Read more » Download » TemperatureRainfallTokyo climateSunshine hoursJanFebMarAprMayJunJulAugSepOctNovDec5°C10°C15°C20°C25°C30°C0 mm50 mm100 mm150 mm200 mm250 mmHighcharts.com Highstock Highstock lets you create stock or general timeline charts in pure JavaScript. Including sophisticated navigation options like a small navigator series, preset date ranges, date picker, scrolling and panning. Read more » Download » ZoomUSD to EUR14. Feb21. Feb28. Feb7. Mar14. Mar21. Mar28. Mar4. Apr11. Apr18. Apr25. Apr2. May9. May20042006200820100.70.650.751m3m6mYTD1yAllHighcharts.com Highmaps Interactive map charts with drilldown and touch support. Build interactive maps to display sales, election results or any other information linked to geography. Perfect for standalone use or in dashboards in combination with Highcharts! Read more » Download » Highcharts © Natural Earth Highcharts Cloud Online charts for non-techies. Create smashing, interactive diagrams for your news site or blog, or for sharing with your friends on social media. Read more » Highcharts Cloud 1 2 3 4 Free for non-commercial Do you want to use Highcharts for a personal website, a school site or a non-profit organisation? Then you don't need our permission, just go on! HTML 5 Based on native browser technologies, no plugins needed Open Fork us on GitHub and participate in tech discussions Compatible With modern browsers including mobile, tablets and old IE back to IE6 Dynamic Add, remove and modify series and points or modify axes Any chart you'd like Highcharts supports line, spline, area, areaspline, column, bar, pie, scatter, angular gauges, arearange, areasplinerang
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值