百度在 Echarts 中添加拖动选项 Polar

Posted

技术标签:

【中文标题】百度在 Echarts 中添加拖动选项 Polar【英文标题】:add drag option Polar in Echarts by baidu 【发布时间】:2017-07-03 22:37:47 【问题描述】:

我正在使用百度 3.0 的 Echarts,我想知道是否可以将拖动选项添加到极坐标图。 拖动选项已解释here 我只能将它与散点图一起使用。 这是极坐标图example。 谢谢

【问题讨论】:

【参考方案1】:

我对 ECharts 没有经验,但我喜欢破解代码 :P 这很有趣(花了我一个小时)。 所以,我为你修改了this example。现在你可以拖动东西了。

代码如下:

var hours = ['12a', '1a', '2a', '3a', '4a', '5a', '6a',
        '7a', '8a', '9a','10a','11a',
        '12p', '1p', '2p', '3p', '4p', '5p',
        '6p', '7p', '8p', '9p', '10p', '11p'];
var days = ['Saturday', 'Friday', 'Thursday',
        'Wednesday', 'Tuesday', 'Monday', 'Sunday'];

var data = [[0,0,5],[0,1,1],[0,2,0],[0,3,0],[0,4,0],[0,5,0],[0,6,0],[0,7,0],[0,8,0],[0,9,0],[0,10,0],[0,11,2],[0,12,4],[0,13,1],[0,14,1],[0,15,3],[0,16,4],[0,17,6],[0,18,4],[0,19,4],[0,20,3],[0,21,3],[0,22,2],[0,23,5],[1,0,7],[1,1,0],[1,2,0],[1,3,0],[1,4,0],[1,5,0],[1,6,0],[1,7,0],[1,8,0],[1,9,0],[1,10,5],[1,11,2],[1,12,2],[1,13,6],[1,14,9],[1,15,11],[1,16,6],[1,17,7],[1,18,8],[1,19,12],[1,20,5],[1,21,5],[1,22,7],[1,23,2],[2,0,1],[2,1,1],[2,2,0],[2,3,0],[2,4,0],[2,5,0],[2,6,0],[2,7,0],[2,8,0],[2,9,0],[2,10,3],[2,11,2],[2,12,1],[2,13,9],[2,14,8],[2,15,10],[2,16,6],[2,17,5],[2,18,5],[2,19,5],[2,20,7],[2,21,4],[2,22,2],[2,23,4],[3,0,7],[3,1,3],[3,2,0],[3,3,0],[3,4,0],[3,5,0],[3,6,0],[3,7,0],[3,8,1],[3,9,0],[3,10,5],[3,11,4],[3,12,7],[3,13,14],[3,14,13],[3,15,12],[3,16,9],[3,17,5],[3,18,5],[3,19,10],[3,20,6],[3,21,4],[3,22,4],[3,23,1],[4,0,1],[4,1,3],[4,2,0],[4,3,0],[4,4,0],[4,5,1],[4,6,0],[4,7,0],[4,8,0],[4,9,2],[4,10,4],[4,11,4],[4,12,2],[4,13,4],[4,14,4],[4,15,14],[4,16,12],[4,17,1],[4,18,8],[4,19,5],[4,20,3],[4,21,7],[4,22,3],[4,23,0],[5,0,2],[5,1,1],[5,2,0],[5,3,3],[5,4,0],[5,5,0],[5,6,0],[5,7,0],[5,8,2],[5,9,0],[5,10,4],[5,11,1],[5,12,5],[5,13,10],[5,14,5],[5,15,7],[5,16,11],[5,17,6],[5,18,0],[5,19,5],[5,20,3],[5,21,4],[5,22,2],[5,23,0],[6,0,1],[6,1,0],[6,2,0],[6,3,0],[6,4,0],[6,5,0],[6,6,0],[6,7,0],[6,8,0],[6,9,0],[6,10,1],[6,11,0],[6,12,2],[6,13,1],[6,14,3],[6,15,4],[6,16,0],[6,17,0],[6,18,0],[6,19,0],[6,20,1],[6,21,2],[6,22,2],[6,23,6]];

option = 
    title: 
        text: 'Punch Card of Github',
        link: 'https://github.com/pissang/echarts-next/graphs/punch-card'
    ,
    legend: 
        data: ['Punch Card'],
        left: 'right'
    ,
    polar: ,
    tooltip: 
        formatter: function (params) 
            return params.value[2] + ' commits in ' + hours[params.value[1]] + ' of ' + days[params.value[0]];
        
    ,
    angleAxis: 
        type: 'category',
        data: hours,
        boundaryGap: false,
        splitLine: 
            show: true,
            lineStyle: 
                color: '#999',
                type: 'dashed'
            
        ,
        axisLine: 
            show: false
        
    ,
    radiusAxis: 
        type: 'category',
        data: days,
        axisLine: 
            show: false
        ,
        axisLabel: 
            rotate: 45
        
    ,
    series: [
        id: 'a', // I added an id like the other example
        name: 'Punch Card',
        type: 'scatter',
        coordinateSystem: 'polar',
        symbolSize: function (val) 
            return val[2] * 2;
        ,
        data: data,
        animationDelay: function (idx) 
            return idx * 5;
        
    ]
;

if (!app.inNode) 
    setTimeout(function () 
        myChart.setOption(
            graphic: echarts.util.map(data, function (item, dataIndex) 
                // I could not get `myChart.convertToPixel` to work
                // So I searched and found myChart._coordSysMgr._coordinateSystems[0].dataToPoint
                // and also myChart._coordSysMgr._coordinateSystems[0].pointToData
                return 
                    type: 'circle',
                    position: myChart._coordSysMgr._coordinateSystems[0].dataToPoint(item),
                    shape: 
                        cx: 0,
                        cy: 0,
                        // The size is based on the 3rd data
                        r: (item[2] * 2) / 2
                    ,
                    invisible: true,
                    draggable: true,
                    ondrag: echarts.util.curry(onPointDragging, dataIndex),
                    onmousemove: echarts.util.curry(showTooltip, dataIndex),
                    onmouseout: echarts.util.curry(hideTooltip, dataIndex),
                    z: 100
                ;
            )
        );
    , 0);
    window.addEventListener('resize', updatePosition);


myChart.on('dataZoom', updatePosition);

function updatePosition() 
    myChart.setOption(
        graphic: echarts.util.map(data, function (item, dataIndex) 
            return 
                position: myChart._coordSysMgr._coordinateSystems[0].dataToPoint(item)
            ;
        )
    );


function showTooltip(dataIndex) 
    myChart.dispatchAction(
        type: 'showTip',
        seriesIndex: 0,
        dataIndex: dataIndex
    );


function hideTooltip(dataIndex) 
    myChart.dispatchAction(type: 'hideTip');


function onPointDragging(dataIndex, dx, dy) 
    // Since our data are on a grid, we have to check if data changed before we
    // update the graph for no reason

    var newData = myChart._coordSysMgr._coordinateSystems[0].pointToData(this.position);
    // If data not changed
    if (newData[0] == data[dataIndex][0] && newData[1] == data[dataIndex][1]) return;

    // Update only the position data (not the 3rd)
    data[dataIndex][0] = newData[0];
    data[dataIndex][1] = newData[1];

    // Update data
    myChart.setOption(
        series: [
            id: 'a',
            data: data
        ]
    );

【讨论】:

以上是关于百度在 Echarts 中添加拖动选项 Polar的主要内容,如果未能解决你的问题,请参考以下文章

vue+echarts实现可拖动节点的折现图(支持拖动方向和上下限的设置)

在百度echarts中添加标识线markLine

echarts 中的圆角条

小程序里echarts画的饼图在安卓手机上效果不正常?

百度echart

echarts使用备忘