header-img
Info :
728x90

์ด๋Ÿฐ ํ˜•ํƒœ์˜ ๋ง‰๋Œ€๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•  ๊ฒƒ์ด๋‹ค.

1. ๊ฐœ์š”

๋ฆฌ์•กํŠธ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์ฐจํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ฝค๋‚˜ ๋งŽ์€๋ฐ ๋‚˜๋Š” ๋”ฑ ๊ธฐ๋ณธ ํ˜•ํƒœ์˜ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ ๊ฐ€ ํ•„์š”ํ•˜์—ฌ ์ œ์ผ ๋ณด๊ธฐ์— ์ฝ”๋“œ๊ฐ€ ์‰ฌ์›Œ๋ณด์ด๋Š” Recharts ๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฑ„ํƒํ•˜์˜€๋‹ค.

ํ˜น์‹œ๋‚˜ ๋ณต์žกํ•œ ํ˜•ํƒœ์˜ ์ฐจํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด.. Nivo.rocks, React Vis, Apexcharts, Victory, Chartjs, Highcharts ๋“ฑ ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ๊ตฌ๊ฒฝํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

๋‚˜๋Š” ์ฐธ๊ณ ๋กœ ๋ฆฌ์•กํŠธ ๊ทธ๋ž˜ํ”„/์ฐจํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ์Œ ์ด๋ผ๋Š” ๊ธ€์„ ์ฐธ๊ณ ํ•˜์—ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ณจ๋ž๋‹ค.

๋˜‘๊ฐ™์€ ์ฐจํŠธ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ ํ•˜๋”๋ผ๋„, ๊ฐ๊ฐ ๋‹ค๋ฅธ ํŠน์ง•์ด ์žˆ์œผ๋‹ˆ ์ด๋Ÿฐ ๊ฒƒ๋„ ๊ณ ๋ คํ•˜๋ฉด ์ข‹์„ ๋“ฏ ํ•˜๋‹ค.


2. ์‚ฌ์šฉ๋ฒ•

1. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

$ npm install recharts

์„ค์น˜๊ฐ€ ์ž˜ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด package.json ์—์„œ "recharts" ๋ถ€๋ถ„์„ ํ™•์ธํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

2. ์ฝ”๋“œ ์ ์šฉํ•˜๊ธฐ

Recharts ํ™ˆํŽ˜์ด์ง€

์ด ๊ณณ์—์„œ ์ฐจํŠธ ๋ชจ์–‘ ์‡ผํ•‘์„ ์ข€ ํ•˜๋ฉด์„œ ๊ตฌ๊ฒฝํ•ด๋ณด๋‹ค๊ฐ€ ์›ํ•˜๋Š” ์ฐจํŠธ๋ฅผ ์„ ํƒํ•ด์ค€๋‹ค.

๋‚˜๋Š” BarChart ์˜ TinyBarChart ๋ฅผ ์ฑ„ํƒํ•˜์˜€๋‹ค.

๋ฐ”๋กœ ์˜†์— ๋œจ๋Š” ์ฝ”๋“œ๋ฅผ ๋ณต๋ถ™ํ•ด์ฃผ๋ฉด ์ด๋Œ€๋กœ ๋จน์—ฌ์ง„๋‹ค.

์„ค๋ช…์„ ์ง„ํ–‰ํ•ด๋ณด์ž๋ฉด

๋จผ์ € ์ฐจํŠธ๋ฅผ ๊ทธ๋ฆฌ๊ณ ์žํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์— import๋ฅผ ํ•ด์ฃผ๊ณ 

import React, { PureComponent } from 'react';
import { BarChart, Bar, 
        Cell, XAxis, 
        YAxis, CartesianGrid, 
        Tooltip, Legend, 
        ResponsiveContainer } from 'recharts';

๋‚˜์™€ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด์„œ ๋ถ™ํ˜€๋„ฃ๊ธฐ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

const data = [
  {
    name: 'Page A',
    uv: 4000,
    pv: 2400,
    amt: 2400,
  },
  {
    name: 'Page B',
    uv: 3000,
    pv: 1398,
    amt: 2210,
  },
  {
    name: 'Page C',
    uv: 2000,
    pv: 9800,
    amt: 2290,
  },
  {
    name: 'Page D',
    uv: 2780,
    pv: 3908,
    amt: 2000,
  },
  {
    name: 'Page E',
    uv: 1890,
    pv: 4800,
    amt: 2181,
  },
  {
    name: 'Page F',
    uv: 2390,
    pv: 3800,
    amt: 2500,
  },
  {
    name: 'Page G',
    uv: 3490,
    pv: 4300,
    amt: 2100,
  },
];

export default class Example extends PureComponent {
  static demoUrl = 'https://codesandbox.io/s/tiny-bar-chart-35meb';

  render() {
    return (
      <ResponsiveContainer width="100%" height="100%">
        <BarChart width={150} height={40} data={data}>
          <Bar dataKey="uv" fill="#8884d8" />
        </BarChart>
      </ResponsiveContainer>
    );
  }
}

๊ทธ๋Ÿฌ๋ฉด ์œ„์™€ ๋˜‘๊ฐ™์€ ์ฐจํŠธ๊ฐ€ ๋พฐ๋กฑํ•˜๊ณ  ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋˜๊ณ .. ์™„์„ฑ์ด๋‹ค.

3. ์ ์šฉํ•˜๊ธฐ

๋‚˜๋Š” ์œ„์˜ ์ฐจํŠธ๊ฐ€ ์ด์˜๊ธด ํ•˜์ง€๋งŒ ์ œ๋ฒ• ๋ถˆ์นœ์ ˆํ•ด๋ณด์ด๋Š” ๋ชจ์–‘์ƒˆ์—ฌ์„œ ์กฐ๊ธˆ ์ˆ˜์ • ํ•ด์„œ ๋„ฃ์–ด๋‘๊ธฐ๋กœ ํ–ˆ๋‹ค.

๋‚˜๋Š” ๋ถ€์„œ๋ณ„ ๊ฐœ์ˆ˜ ํ™•์ธ์„ ์œ„ํ•œ ์šฉ๋„๋กœ ์ฐจํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ x์ถ• ํƒœ๊ทธ ์—๋Š” ๋ถ€์„œ๊ฐ€ ๋ถ™์–ด์•ผ ํ•˜๊ณ , y์ถ• ํƒœ๊ทธ์—๋Š” ๊ฐœ์ˆ˜ ๊ฐ€ ๋ถ™์–ด์ฃผ๋Š”๊ฒŒ ๊ฐ€์‹œ์„ฑ ํ–ฅ์ƒ์— ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ํŒ๋‹จ์„ ํ–ˆ๋‹ค.

์ผ๋‹จ import ๋ถ€ํ„ฐ..
๊ทผ๋ฐ ์œ„์ฒ˜๋Ÿผ ๋‹ค import ํ•  ํ•„์š”๋Š” ์—†๊ณ  ํ•„์š”ํ•œ ์• ๋“ค๋งŒ import

import { BarChart, Bar, XAxis, YAxis } from "recharts";

๋‹ค์Œ์€ ์ฝ”๋“œ

const data = [
  {
    name: "๋ถ€์„œ 1",
    num: 5
  },
  {
    name: "๋ถ€์„œ 2",
    num: 3
  },
  {
    name: "๋ถ€์„œ 3",
    num: 1
  },
  {
    name: "๋ถ€์„œ 4",
    num: 2
  }
  ,
  {
    name: "๋ถ€์„œ 5",
    num: 4
  },
  {
    name: "๋ถ€์„œ 6",
    num: 2
  }
];

export default function App() {
  return (
    <BarChart width={500} height={200} data={data}>
      <Bar dataKey="num" fill="#8884d8" />
      <XAxis dataKey="name" />
      <YAxis />
    </BarChart>
  );
}

num ์€ ๊ฐœ์ˆ˜ ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  x์ถ• ์—๋Š” ์ด๋ฆ„ ์„ ๋„ฃ์–ด์ค„๊ฑฐ๊ณ , y์ถ• ์—๋Š” ๊ฐœ์ˆ˜ ๋ฅผ ํ‘œ์‹œํ•ด์ค„๊ฒƒ์ด๋‹ค.

์ˆ˜์ •ํ•ด์„œ ์“ฐ๋Š”๋ฐ์— ๋„์›€์ด ๋˜๊ธธ ๋ฐ”๋ผ๋ฉฐ ์ด๋งŒ React Recharts ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ๊ธ€์„ ๋งˆ์นฉ๋‹ˆ๋‹น

728x90
๋”๋ณด๊ธฐ
FRONTEND/React