Как отобразить панель стека сумм в echarts

1

Я использую eChatrs в качестве библиотеки графиков. Нужный график должен выглядеть так:

Изображение 174551

Что мне нужно, это показать итоги над каждым столбцом. Какова лучшая практика для этого?

Теги:
charts
echarts

1 ответ

0

Вы можете использовать форматтер для этого, проверьте это демо:

let echartsObj = echarts.init(document.querySelector('#canvas'));
series = [{
    name: 'Server #1',
    data: [100, 115, 165, 107, 67]
}, {
    name: 'Server #2',
    data: [85, 106, 129, 161, 123]
}, {
    name: 'Server #3',
    data: [67, 87, 86, 167, 157]
}]

genFormatter = (series) => {
    return (param) => {
        console.log(param);
        let sum = 0;
        series.forEach(item => {
            sum += item.data[param.dataIndex];
        });
        return sum
    }
};

option = {
    color: ['#b8d6f2', '#c6e19a', '#f3b879' ],
    legend: {
        data: series.map(item => item.name),
        right: 'right',

    },
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
    },

    yAxis: {
        type: 'value'
    },
    series: series.map((item, index) => Object.assign(item, {
        type: 'bar',
        stack: true,
        label: {
            show: index == series.length - 1 ? true : false,
            formatter: genFormatter(series),
            fontSize: 20,
            color: 'black',
            position: 'top'
        },
    }))
};
echartsObj.setOption(option)
<html>
      <header>
        <script src="/echarts-en.min.js"></script>
      </header>
      <body>
        <div id="canvas" style="width: 70%; height: 300px">
        </div>
      </body>
</html>

Однако, как мы видим, эта демонстрация отображает только общее значение над каждым столбцом.

если вы хотите, чтобы общая стоимость и стоимость каждой серии,

Вот хитрость для достижения этой цели: используйте пустую серию для отображения общей стоимости.

проверьте это демо:

let echartsObj = echarts.init(document.querySelector('#canvas'));

series = [{
    name: 'Server #1',
    data: [100, 115, 165, 107, 67]
}, {
    name: 'Server #2',
    data: [85, 106, 129, 161, 123]
}, {
    name: 'Server #3',
    data: [67, 87, 86, 167, 157]
}, {
    name: 'Server #3',
    data: [0,0,0,0,0]
}]

genFormatter = (series) => {
    return (param) => {
        console.log(param);
        let sum = 0;
        series.forEach(item => {
            sum += item.data[param.dataIndex];
        });
        return sum
    }
};

function isLastSeries(index) {
    return index === series.length - 1
}
option = {
    color: ['#b8d6f2', '#c6e19a', '#f3b879' ],
    legend: {
        data: series.map(item => item.name),
        right: 'right',
        
    },
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
    },
   
    yAxis: {
        type: 'value'
    },
    series: series.map((item, index) => Object.assign(item, {
        type: 'bar',
        stack: true,
        label: {
            show: true,
            formatter: isLastSeries(index) ? genFormatter(series) : null,
            fontSize:  isLastSeries(index) ? 20 : 15,
            color: 'black',
            position: isLastSeries(index) ? 'top' : 'inside'
        },
    }))
};
echartsObj.setOption(option)
<html>
      <header>
        <script src="/echarts-en.min.js"></script>
      </header>
      <body>
        <div id="canvas" style="width: 70%; height: 400px">
        </div>
      </body>
    </html>
  • 0
    Вы можете упростить этот код: show: index === series.length - 1,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню