KeiStory

반응형

ECharts 에 바인딩 된 Dataset Source 내용 DataView 에 표시하기

 

ECharts 에는 DataView 기능이 있어 화면에 표시된 포인터 들의 정보를 확인할 수 있습니다

toolbox.feature.dataView 를 show:true 해주면 toolbox 에 view 버튼이 생겨 x,y 축 값을 확인할 수 있습니다.

<!DOCTYPE html>
<html style="height: 100%">
<head>
    <meta charset="utf-8">
    <title>ECharts</title>
    <script src="https://cdn.jsdelivr.net/npm/echarts@5.3.0/dist/echarts.min.js"></script>
</head>
<body style="height: 100%; margin: 0">
<div id="main" style="height: 100%"></div>
<script type="text/javascript">
    var chartDom = document.getElementById('main');
    var myChart = echarts.init(chartDom);
    var option;

    // 1만 개의 데이터를 생성
    var data = [['Time', 'Y', 'A', 'B', 'C', 'D']];
    var startTime = new Date(2020, 0, 1).getTime();
    for (var i = 0; i < 100; i++) {
        var time = new Date(startTime + i * 1000 * 60 * 60 * 24); // 하루 단위로 증가
        data.push([
            time.toISOString().split('T')[0],
            (Math.random() * 100).toFixed(2),
            (Math.random() * 100).toFixed(2),
            (Math.random() * 100).toFixed(2),
            (Math.random() * 100).toFixed(2),
            (Math.random() * 100).toFixed(2)
        ]);
    }

    option = {
        title: {
            text: 'Dataset DataView Test'
        },
        tooltip: {},
        toolbox: {
            feature: {
                dataView: {
                    show: true,
                    readOnly: true
                }
            }
        },
        dataset: {
            source: data
        },
        xAxis: { type: 'category' },
        yAxis: { type: 'value' },
        series: [
            { type: 'line', encode: { x: 'Time', y: 'Y' } }
        ]
    };

    myChart.setOption(option);
</script>
</body>
</html>

Dataview

 

optionToContent 를 이용하면 function 에 표시할 데이터를 커스텀하게 처리할 수 있습니다.

<!DOCTYPE html>
<html style="height: 100%">
<head>
    <meta charset="utf-8">
    <title>ECharts</title>
    <script src="https://cdn.jsdelivr.net/npm/echarts@5.3.0/dist/echarts.min.js"></script>
</head>
<body style="height: 100%; margin: 0">
<div id="main" style="height: 100%"></div>
<script type="text/javascript">
    var chartDom = document.getElementById('main');
    var myChart = echarts.init(chartDom);
    var option;

    // 1만 개의 데이터를 생성
    var data = [['Time', 'Y', 'A', 'B', 'C', 'D']];
    var startTime = new Date(2020, 0, 1).getTime();
    for (var i = 0; i < 100; i++) {
        var time = new Date(startTime + i * 1000 * 60 * 60 * 24); // 하루 단위로 증가
        data.push([
            time.toISOString().split('T')[0],
            (Math.random() * 100).toFixed(2),
            (Math.random() * 100).toFixed(2),
            (Math.random() * 100).toFixed(2),
            (Math.random() * 100).toFixed(2),
            (Math.random() * 100).toFixed(2)
        ]);
    }

    option = {
        title: {
            text: 'Dataset DataView Test'
        },
        tooltip: {},
        toolbox: {
            feature: {
                dataView: {
                    show: true,
                    readOnly: true,
                    optionToContent: function(opt) {
                        var table = '<table style="width:100%;text-align:center"><tbody>';
                        var source = opt.dataset[0].source;
                        for (var i = 0; i < source.length; i++) {
                            table += '<tr>';
                            for (var j = 0; j < source[i].length; j++) {
                                if (i === 0) {
                                    table += '<th>' + source[i][j] + '</th>';
                                } else {
                                    table += '<td>' + source[i][j] + '</td>';
                                }
                            }
                            table += '</tr>';
                        }
                        table += '</tbody></table>';
                        return table;
                    }
                }
            }
        },
        dataset: {
            source: data
        },
        xAxis: { type: 'category' },
        yAxis: { type: 'value' },
        series: [
            { type: 'line', encode: { x: 'Time', y: 'Y' } }
        ]
    };

    myChart.setOption(option);
</script>
</body>
</html>

DataView 

간단하게 표시 하는데는 문제없을 것 같은데 데이터가 많은 경우라면 가상화 처리도 필요해 보입니다.

예시링크

https://echarts.apache.org/examples/en/editor.html?code=PTAEEZBnO1BwawNcdIB2bAu44BkXA-naQuwOEZBgsAFCjGgBuAhgE6gAm5ALuaALygDabA5ACoCWAtgFNOAGlCcAmqPEBBaZwBC8gMLyAIpwC6mgNyESZKqADOjSvT5CWoAHaCA7qDUNBACgBMABi9jPY8ACUAHQA5oIWAm4BekQkAGYA9tSuFNS81p46oOkAPBCemdkA1EUBoADe-gYkqaD0kdZ2js70bqZUEVZF2aAAVPkFfaAAbJ5Do0PuACzRoCCggBqrgBcdoIAXTYAg44A6HaCAuZOAADVV1bQM5EEADgCuxgAWrmyHRyT1QkH0CQCSAMoA8p_0lLwbCFXMFjGcADa8eiuHicAJsTyaEQPR6gVwAWQY1yClHINhoCX4IKG4AKwTeADFeAAPQQ0DwBZGxVHEDFYnF4glEsr9UmeckJKm0-nuRkox5s-jY3H4wnE3lk16Cml0hlMlkkSXSzlynkDAVC1Wi9UatGYqUc2XckmKykqkUBcXETTRB4AX0IDwSZ3qCRs1kqzOq9Xo4MEAC4Kk7g4JqfRI5wWuRjOEnCcAGq8BygbiCUycaNuk1HN4JcH1M6R8pF6Ol8EAIwS1Kr0YMcUEDAulAjUaDpuOjEzDhbff7JBuCXskf-F0ExbHBm75Bo3xs4IAntPKLP5wviN7fTZuAllH7WjZ46A4hcbABjQ-uA9lQN7lm1Rj1sPWTg5D9f0zrmGzAAET2LwNBSuGfIAKQ6K0cYALTkJCIQ2OGt6CBegiUMBAB8v6NjQ664ZwMSvqitTGAkXYYdYB5BHQjApvQCKaEEVE0YIZHkUciTJLU6SsIUuQmNRlAYUEYZAlKWS8CUz6tjxdTkJ-gigEUrA_v8JHcUpjx8WitQAFYZFkJl5Bx4mCGwvBsVJIQyaARnyb2en9rwcRooJzBCQpo5uSyf5qRp4i_tcJHqaJnE2ZobBGZokU_sAUo6YpAVuqAgjgimrkBWOQXqZpv40BF3SWRhMVxQl3RJfQJWkWlbkev5TWNa-BUhbVlCpS1r7NXlymqYVoXJYRxE5MlKlhj1A3dvQXb-kFunkf1e6rRq63VDWLWMcm4Qjv25U9rtha7iQ1IyNSvDGFWdTrmcPacLeLghEk66cKA22ouul3Xbd9D3Y9FDgrOH1fY8KYAnmkb3L1JDlHdD0JpCdjSJht4JDQPYI824iWMIYibuIUifZ90aaO6OhAA&_source=echarts-doc-preview

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band