Столбчатая диаграмма с накоплением с помощью ReactJS

#javascript #reactjs #graph #graphics #bar-chart

#javascript #reactjs #График #графика #столбчатая диаграмма

Вопрос:

Мне нужно создать единую гистограмму с накоплением, получая данные из API, но я нахожу некоторые проблемы.

1- С одной стороны, данные, которые я получаю, не округляются, даже если я использую%.

2- С другой стороны, общее количество, которое я получаю, не всегда равно 100%, тогда полоса иногда на несколько пикселей короче, а иногда на несколько пикселей длиннее, чем ожидалось.

 import styled from 'styled-components'
import { Data } from '../../Types'

const Colors: Record<string, string> = {
    warning: 'yellow',
    good: 'green',
    danger: 'red',
}

const StackedBar = (props: {
    title?: string
    Data: Data | null
}) => {

    return (
        <div>
            <div
                style={{
                    display: 'flex',
                    flex: '1 1 auto',
                    alignSelf: 'auto',
                }}
            >
                {props amp;amp; props.Data ? (
                    props.Data.items.map((item) => {
                        const percentage =
                            (item.count / items_total) * 100
                        return (
                            <Rectangle
                                percentage={percentage}
                                color={
                                    itemColors[item.items_total]
                                }
                            />
                        )
                    })
                ) : (
                    <Rectangle percentage={100} color="grey" />
                )}
            </div>
        </div>
    )
}

export default StackedBar

const Rectangle = styled.div<{ percentage: number; color: string }>`
    height: 20px;
    width: ${(props) => props.percentage}%;
    background-color: ${(props) => props.color};
`

const NormalBold = styled.p`
    font-weight: 700;
    font-size: var(--font-size-normal);
`
 

Ответ №1:

процент =(item.count / items_total) * 100, здесь items_ total не определен, проверьте код еще раз. Я думаю, что это должно быть item.items_total. для округления используйте Math.round(в процентах), чтобы округлить значения. Я думаю, это должно решить ваши проблемы.

Комментарии:

1. Привет! Спасибо, у меня есть items_total, определенный где-то в другом месте (это вызов из API). Как я могу использовать Math.round, чтобы в сумме не было ни больше, ни меньше 100%?