用echarts制作帶成交量的K線圖


官網很多列子有時候少數據就不知道要做出效果只需加那些配置,多余的去除后又容易報錯,下面來看一下怎么做的

先看效果如下:

 

最主要需要注意的地方就是:

1、grid,xAxis,yAxis,series都要各自設置蠟燭圖的成交量的柱狀圖的,缺一不可,需要寫這2個類型的。

2、要使下面成交量的柱狀圖與上面蠟燭圖的顏色一致需要設置visualMap視覺映射組。

3、要修改划過顯示的為中文或者不是默認的字需要修改formatter,
4、tooltip里設置formatter要與grid和xAxis等在同一級,放在series里設置是不起作用的
 
        

 

html如下

<div id="main" style="width: 1200px;height: 500px;"></div>

script如下

 var chartDom = document.getElementById('main');
    var myChart = echarts.init(chartDom);
    
    var upColor = '#ec0000';//紅漲
    var downColor = '#00da3c';//綠跌
    var dataTime=["2004-01-02", "2004-01-05","2004-01-06", "2004-01-07", "2004-01-08","2004-01-09", "2004-01-12", "2004-01-13", "2004-01-14", "2004-01-15",];//時間
    var dataMes=[//蠟燭圖數據
        [
            10452.74,
            10409.85,
            10367.41,
            10554.96
        ], [
            10411.85,
            10544.07,
            10411.85,
            10575.92
        ], [
            10543.85,
            10538.66,
            10454.37,
            10584.07
        ], [
            10535.46,
            10529.03,
            10432,
            10587.55
        ], [
            10530.07,
            10592.44,
            10480.59,
            10651.99
        ], [
            10589.25,
            10458.89,
            10420.52,
            10603.48
        ], [
            10461.55,
            10485.18,
            10389.85,
            10543.03
        ], [
            10485.18,
            10427.18,
            10341.19,
            10539.25
        ], [
            10428.67,
            10538.37,
            10426.89,
            10573.85
        ], [
            10534.52,
            10553.85,
            10454.52,
            10639.03
        ],
    ]
   var volumeNum=[ 168890000,221290000,191460000, 225490000,237770000, 223250000,197960000,197310000,186280000,260090000];//交易量
    var volumeData=[]//交易量添加顏色判斷
    for (var i = 0; i < dataMes.length; i++) {
        //console.log("開盤價"+dataMes[i][0])
        //console.log("收盤價"+dataMes[i][1])
        volumeData.push([dataTime[i], volumeNum[i], dataMes[i][0] > dataMes[i][1] ? 1 : -1]);
        //第一個代表時間,第二個代表成交量的值,第三個判斷顏色1為綠色-1為紅色
    }
    var option;
    option = {

            tooltip: {
                trigger: 'axis',
                axisPointer: {
                    type: 'cross',
                    link: {xAxisIndex: 'all'},//上下划過分開展示還是一起展示
                },
                textStyle: {
                    color: '#000'
                },
                formatter: function (params) {//修改鼠標划過顯示為中文

                    if(params[0].componentSubType=="candlestick"){//先划過蠟燭圖
                        var params1 = params[0];//開盤收盤最低最高數據匯總
                        var params2 = params[1].data[1];//成交量數據

                    }else if(params[0].componentSubType=="bar"){//先划過成交量
                        var params1 = params[1];//開盤收盤最低最高數據匯總
                        var params2 = params[0].data[1];//成交量數據

                    }
                    var currentItemData = params1.data;//k線數據
                    return params1.name + '<br>' +
                        '開盤價:' + currentItemData[1] + '<br>' +
                        '收盤價:' + currentItemData[2] + '<br>' +
                        '最低價:' + currentItemData[3] + '<br>' +
                        '最高價:' + currentItemData[4] + '<br>' +
                        '成交量:' + params2
                }

                // extraCssText: 'width: 170px'
            },

            axisPointer: {
                link: {xAxisIndex: 'all'},//整體划過還是單個划過
                label: {
                    backgroundColor: '#777'
                }
            },
            visualMap: {//視覺映射組,就是將數據映射到視覺元素
                show: false,
                seriesIndex: 1,//指定取哪個系列的數據,第幾個圖形的數據,從0開始,1代表的是成交量的柱狀圖
                pieces: [{//自定義『分段式視覺映射組件』的每一段的范圍,以及每一段的文字,以及每一段的特別的樣式
                    value: 1,//value值為1則用downColor顏色的樣式
                    color: downColor
                }, {
                    value: -1,
                    color: upColor
                }]
            },
            grid: [
                {//蠟燭圖的位置
                    left: '10%',
                    right: '8%',
                    height: '50%'
                },
                {//成交量柱狀圖的位置
                    left: '10%',
                    right: '8%',
                    top: '63%',
                    height: '16%'
                }
            ],
            xAxis: [
                {//蠟燭圖的設置
                    type: 'category',
                    data: dataTime,
                    scale: true,
                    //boundaryGap: false,
                    axisLine: {onZero: false},
                    splitLine: {show: false},
                    splitNumber: 20,
                    min: 'dataMin',
                    max: 'dataMax',
                    axisPointer: {
                        z: 100
                    },

                },
                {//成交量柱狀圖的設置
                    type: 'category',
                    gridIndex: 1,
                    data: dataTime,
                    scale: true,
                    //boundaryGap: false,
                    axisLine: {onZero: false},
                    axisTick: {show: false},
                    splitLine: {show: false},
                    axisLabel: {show: false},
                    splitNumber: 20,
                    min: 'dataMin',
                    max: 'dataMax'
                }
            ],
            yAxis: [
                {
                    scale: true,
                    splitArea: {
                        show: true
                    }
                },
                {
                    scale: true,
                    gridIndex: 1,
                    splitNumber: 2,
                    axisLabel: {show: false},
                    axisLine: {show: false},
                    axisTick: {show: false},
                    splitLine: {show: false}
                }
            ],

            series: [{//蠟燭圖的設置
                    type: 'candlestick',
                    data: dataMes,
                    barWidth : 30,//圖形的寬度
                    itemStyle: {
                        color: upColor,
                        color0: downColor,
                        borderColor: null,
                        borderColor0: null
                    },
                },
                {//成交量柱狀圖的設置
                    name: 'Volume',
                    type: 'bar',
                    barWidth : 30,//柱狀圖的寬度
                    xAxisIndex: 1,
                    yAxisIndex: 1,
                    data: volumeData
                }
            ]
        };


    option && myChart.setOption(option);

 如有其他需要可以查看官網的例子地址如下:https://echarts.apache.org/examples/zh/editor.html?c=candlestick-brush


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM