페블_
반짝이는 시냅스
페블_
전체 방문자
오늘
어제
  • 전체글 보기 (96)
    • QA (0)
    • 프로젝트 회고 (4)
    • 프로젝트 과정 기록 (12)
    • UI 구현 연구일지 (8)
    • Front-end (31)
      • Javascript (7)
      • CSS (10)
      • React (5)
      • Typescript (3)
      • Nextjs (3)
      • 스타일링 라이브러리 (3)
    • Back-end (0)
      • Express (0)
      • DB (0)
    • CS (0)
      • 자료구조 & 알고리즘 (0)
    • CI&CD (1)
    • 툴 사용법 (4)
      • Git (1)
      • Library&패키지 (2)
      • 기타 개발관련 (1)
    • 알고리즘 이론 & 풀이 (36)
      • 백준(BOJ) (14)
      • 프로그래머스 (22)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • JS
  • UI 컴포넌트
  • chartjs
  • eslint
  • Python
  • 개발블로그_시작
  • storybook
  • 파이썬
  • 시리즈_표지
  • 생각
  • TypeScript
  • 토이프로젝트
  • 캐러셀
  • 백준
  • 선형대수학
  • emotion
  • react
  • 알고리즘

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
페블_

반짝이는 시냅스

[React] Chartjs로 막대그래프 그리기
프로젝트 과정 기록

[React] Chartjs로 막대그래프 그리기

2023. 8. 4. 23:08

패키지 설치

npm install chartjs react-chartjs-2

chartjs 뿐만 아니라 react에서 chart를 렌더링하기 위한 react-chartjs-2도 설치해야한다.

 

Chart 그리기

1) 사용할 chart 요소 등록하기 (register)

react에서 chartjs를 사용하려면 컴포넌트를 불러오는 것 뿐만 아니라 사용할 컴포넌트들을 register하는 과정이 필요하다.

import React from 'react';
import { Bar } from 'react-chartjs-2';
import {
  Chart as ChartJS,
  CategoryScale,
  LinearScale,
  Title,
  Tooltip,
  Legend,
  BarElement,
} from 'chart.js';
import { css } from '@emotion/react';

ChartJS.register(
  CategoryScale,
  LinearScale,
  BarElement,
  Title,
  Tooltip,
  Legend
);

2) Bar 컴포넌트 불러오기

인자로는 차트에 표시할 data와 options를 내려주면 된다.

return (
    <div css={chartBoxStyle}>
      <Bar data={data} options={options} />
    </div>
);

3) data 및 options 설정

  const [ratings, setRatings] = useState([
    { stars: 1, count: 100 },
    { stars: 2, count: 230 },
    { stars: 3, count: 700 },
    { stars: 4, count: 500 },
    { stars: 5, count: 520 },
  ]);
  
  const [data, setData] = useState({
    labels: ratings.map((item) => `${item.stars}점`),
    datasets: [
      {
        label: '별점 분포',
        data: ratings.map((item) => item.count),
        borderWidth: 1,
      },
    ],
  });

  const options = {
    responsive: true,
    maintainAspectRatio: false, // 차트 크기 조정 허용
    scales: {
      x: {
        grid: {
          display: false, // bar 구분하는 격자 숨김
        },
      },
      y: {
        beginAtZero: true,
        grid: {
          display: false, // 눈금 격자 숨김
        },
        ticks: {
          display: false,
          callback: function (value: any, index: any, values: any) {
            return value.toLocaleString();
          },
        },
      },
    },
  };

 

차트의 크기를 반응형으로 조정하고 싶다면?

options에서 responsive와 maintainAspectRation를 다음과 같이 설정해준다.

const options = {
    responsive: true,
    maintainAspectRatio: false,
    // ...
}

그리고 width를 설정할 때 고정 크기로 지정하는게 아니라 max-width를 지정해줘서 줄어드는 것이 자유롭도록 한다.

const chartBoxStyle = css`
  margin: auto;
  max-width: 600px;
`;

'프로젝트 과정 기록' 카테고리의 다른 글

[Project] Youtube Party 만들기 (1) - 프로젝트 환경설정 | Nextjs + Typescript + Express  (0) 2023.09.23
[Project] Youtube Party 만들기 - 프로젝트 주제, 컨셉  (0) 2023.09.22
[JS] Chartjs 막대그래프 그리기 (별점 분포 차트)  (0) 2023.08.03
[React] 회원가입 유효성 검사 구현하며 겪은 시행착오와 react-hook-form 사용  (0) 2023.07.31
[React] 카카오 지도 API - 키워드로 장소 검색하고 목록으로 보여주기 구현 +) Typescript  (0) 2023.07.17
    '프로젝트 과정 기록' 카테고리의 다른 글
    • [Project] Youtube Party 만들기 (1) - 프로젝트 환경설정 | Nextjs + Typescript + Express
    • [Project] Youtube Party 만들기 - 프로젝트 주제, 컨셉
    • [JS] Chartjs 막대그래프 그리기 (별점 분포 차트)
    • [React] 회원가입 유효성 검사 구현하며 겪은 시행착오와 react-hook-form 사용
    페블_
    페블_

    티스토리툴바