250x250
๋ฐ˜์‘ํ˜•
Notice
Recent Posts
Recent Comments
Link
ยซ   2024/07   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

BEAT A SHOTGUN

[Recharts] bar ๋ฅผ floating bar ๋กœ ๋งŒ๋“ค์–ด ์ง„์งœ ์ฃผ์‹ ์ฐจํŠธ์ฒ˜๋Ÿผ ๊ทธ๋ฆฌ๊ธฐ ๋ณธ๋ฌธ

PROJECT

[Recharts] bar ๋ฅผ floating bar ๋กœ ๋งŒ๋“ค์–ด ์ง„์งœ ์ฃผ์‹ ์ฐจํŠธ์ฒ˜๋Ÿผ ๊ทธ๋ฆฌ๊ธฐ

thovy 2022. 11. 14. 20:50
728x90
๋ฐ˜์‘ํ˜•
SMALL

์‹œ์ž‘ ๐Ÿ‘Š

์ฃผ์‹ ์ฐจํŠธ๋ฅผ ๊ทธ๋ฆฌ๋Š”๋ฐ "์ƒํ•œ๊ฐ€"๋กœ๋งŒ ํ‘œํ˜„๋œ๋‹ค.๐Ÿ˜Ÿ

๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ฐจํŠธ ๊ทธ๋ฆผ์€ ์ด๊ฒŒ ์•„๋‹ˆ์•ผ.

๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ฐจํŠธ๋Š” ์ง„์งœ ์ฃผ์‹ ์ฐจํŠธ ์ฒ˜๋Ÿผ

ํ•˜ํ•œ๊ฐ€ ์ƒํ•œ๊ฐ€๋ฅผ ๊ฐ€์ง€๊ณ  ๋ง‰๋Œ€์˜ ๊ธธ์ด๋ฅผ ์กฐ์ ˆํ•˜๊ณ  ์‹ถ๋‹ค.

๋‚ด๊ฐ€ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ(ํ•œ๊ตญํˆฌ์ž์ฆ๊ถŒ ์ฃผ์‹ API)์— ์ด๋ ‡๊ฒŒ ๋ชจ๋“  ๊ฒŒ ๋‹ด๊ฒจ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

์ฃผ๊ฐ€ ์•„๋ž˜์ชฝ ๋ฐ”๋‹ฅ์—๋Š” ๊ฑฐ๋ž˜๋Ÿ‰๊นŒ์ง€ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
์‚ฌ์‹ค ๊ฑฐ๋ž˜๋Ÿ‰์„ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต์ง€ ์•Š๋‹ค.

๊ฑฐ๋ž˜๋Ÿ‰์€ ๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ์˜ฌ๋ผ์˜ค๋ฉด ๋˜๋Š” ๊ทธ๋ƒฅ ๋ง‰๋Œ€๊ทธ๋ž˜ํ”„ ๊ธฐ ๋•Œ๋ฌธ์— <Bar/> ๋ฅผ ํ•˜๋‚˜ ๋” ๋„ฃ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

๊ฒฐ๊ตญ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฑด ๐Ÿค”

  1. ํ•˜ํ•œ๊ฐ€ ์ƒํ•œ๊ฐ€ ๋ฅผ ์ด์šฉํ•ด ๋ง‰๋Œ€๋ฅผ ๊ณต์ค‘์— ๋„์šฐ๊ธฐ floating
  2. ์ „์ผ ๋Œ€๋น„ ๋ถ€ํ˜ธ ๋ฅผ ์ด์šฉํ•ด ๋ง‰๋Œ€๊ทธ๋ž˜ํ”„ ์ƒ‰๊น” ๋ฐ”๊พธ๊ธฐ
  3. ๋ฐ”๋‹ฅ์— ๊ฑฐ๋ž˜๋Ÿ‰ ๋ง‰๋Œ€ ํ‘œ์‹œํ•˜๊ธฐ

๐Ÿ™‚ ๋งŒ๋“ค์–ด๋ณด์ž

๐Ÿ™‹โ€โ™‚๏ธ 1๋ฒˆ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด๋ณผ๊นŒ์šค.

  1. dataKey ๊ฐ’์—๋Š”String or Number ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.
    ํ•˜์ง€๋งŒ
    LineChart ์—์„œ๋Š”function ๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๋‹ค.

  2. function ์„ ๋„ฃ์–ด๋ณด์ž.

  3. <BarChart data={stockData} width={500} height={300}> <CartesianGrid strokeDasharray="3 3"/> <XAxis dataKey="stck_bsop_date"/> <YAxis /> <Tooltip/> <Bar dataKey={ (data)=>{ const range = [data.stck_hgpr, data.stck_lwpr] return range}} fill = "#E94560" /> </BarChart>

์šฐ๋ฆฌ๊ฐ€ ๋ฐ›์•„์˜จ ์ฃผ๊ฐ€ data ์ธ stockData ๊ฐ€ <BarChart data={stockData}> ๋กœ ๋“ค์–ด๊ฐ€์„œ
<Bar> ์— ์žˆ๋Š” dataKey ๋กœ ํ•˜๋‚˜์”ฉ ๋ฟŒ๋ ค์ง„๋‹ค.

  1. ๊ทธ๋ƒฅ String ์œผ๋กœ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” dataKey="stck_hgpr" ์ด๋ผ๊ณ  ์“ฐ๋ฉด๋œ๋‹ค. ๊ทธ ์•ˆ์— ์žˆ๋Š” ๊ฐ’์„ ๋ฟŒ๋ ค์ฃผ๋Š” ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐ๋จ.
    ํ•˜์ง€๋งŒ ๋‚˜๋Š” ๋ฒ”์œ„๋กœ ๊ทธ๋ฆฌ๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์ŠคํŠธํ˜•ํƒœ๋กœ ๋ณด๋‚ด์คฌ์–ด์•ผํ•œ๋‹ค.
    Barchart API Docs
    Barchart API Docs Exam

์ด๊ฒƒ์ฒ˜๋Ÿผ ๋ณด๋‚ด์ค˜์•ผํ•˜๋Š”๋ฐ, ์šฐ๋ฆฌ๊ฐ€ stockData ๋ฅผ ๋ฐ›์•„์˜ค๋ฉด ๋ฐ”๋กœ ๊ฐ’์ด ์ •ํ•ด์ง€๋ฏ€๋กœ ํ™”์‚ดํ‘œํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด๋ดค์ง€!

๊ฒฐ๊ณผ

)

๋”ฐ๋ž€~!
์‹ฌ์‹ฌํ•˜์ง€๋งŒ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”๋‹ค.

๐Ÿ™†โ€โ™‚๏ธ 2๋ฒˆ์„ ๋งŒ๋“ค์–ด๋ณผ๊นŒ์šค.

์ฐจํŠธ ๊ธฐ๋‘ฅ๋งˆ๋‹ค ์ƒ‰๊น” ๋ฐ”๊พธ๊ธฐ๋Š” Custom ์—์„œ ํžŒํŠธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

)

์ด๋ ‡๊ฒŒ <Bar> ์ปดํฌ๋„ŒํŠธ ์•ˆ์ชฝ์— <Cell> ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ๊ฑฐ๊ธฐ์„œ path ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

๋‚ด๊ฐ€ ์ฒ˜์Œ์— ์ƒ๊ฐํ–ˆ๋˜

solution 1 โŒ

<Bar> ์ปดํฌ๋„ŒํŠธ์˜ ์†์„ฑ๊ฐ’์œผ๋กœ fill ์ด ์žˆ์œผ๋‹ˆ ๊ฑฐ๊ธฐ์— ์ ์–ด์ฃผ๋ฉด ๋˜์ง€ ์•Š์„๊นŒ ํ•ด์„œ

<BarChart data={stockData} width={500} height={300}>
  <CartesianGrid strokeDasharray="3 3"/>
  <XAxis dataKey="stck_bsop_date"/>
  <YAxis />
  <Tooltip/>
  <Bar
      dataKey={
    (data)=>{
      const range = [data.stck_hgpr, data.stck_lwpr]
      return range}}
    fill = {(stockData.prdy_vrss_sign > 3) ? "#006DEE" : "#E94560"}
  />
</BarChart>

์ด๋ ‡๊ฒŒ ์ ์—ˆ๋Š”๋ฐ

๊ทธ๋Ÿฌ๋ฉด ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง€์ง€ ์•Š๋Š”๋‹ค.

solution 2 โŒ

๊ทธ๋ž˜์„œ dataKey ์ฒ˜๋Ÿผ ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด๋ณผ๊นŒ.

<Bar
  ...

  fill={(e)=>{
    const a = e.stck_hgpr;
    return a
  }}
/>

ํ•˜๋ฉด

solution 3 โœ…

๊ทธ๋ž˜์„œ ์‚ดํŽด๋ณธ Docs ์˜ Custom ๋ถ€๋ถ„.

<Cell> ์„ ์ด์šฉํ•ด๋ณด์ž!

<Bar
 ...
>
     {stockData.map((data)=>(
      <Cell fill={(data.prdy_vrss_sign > 3) ? "#006DEE" : "#E94560"}/>
      ))}
</Bar>

๋”ฐ๋ž€!

)

์‰ฝ๋‹ค ์‰ฌ์›Œ~ (์ƒ‰๊น”๋งŒ ์ดํ‹€์žก์•„๋จน์Œ)๐Ÿคฃ

๐Ÿ‘จโ€๐Ÿ’ป 3๋ฒˆ์„ ๋งŒ๋“ค์–ด๋ณผ๊นŒ์šค.

์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•˜๋Š” Bar ์ปดํฌ๋„ŒํŠธ์™€ ๊ฑฐ๊ธฐ์— ๋ฐ์ดํ„ฐ ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์ž

๐Ÿ‘ ์ฐจํŠธ ์กฐํ•ฉ
๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ์ฐจํŠธ๋ฅผ ์กฐํ•ฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ComposedChart ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค
์˜ˆ๋ฅผ๋“ค๋ฉด ํ•˜๋‚˜๋Š” Bar, ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” Line chart ๋ฅผ ์ด์šฉํ•˜๋ ค๋ฉด ComposedChart ๋ฅผ ์ด์šฉํ•˜์ž!
๊ทธ๋Ÿฌ์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น Chart ์™€ ๊ฐ™์€ ๊ฒƒ๋งŒ ํ‘œ์‹œ๋œ๋‹ค!
๐ŸŽ‡์ฆ‰, BarChart ๋‚ด๋ถ€์— Bar ์™€ Line ์„ ๋„ฃ์œผ๋ฉด Bar ๋งŒ ํ‘œ์‹œ๋˜๊ณ  Line ์€ ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š”๋‹ค.
ํ•˜์ง€๋งŒ ComposedChart ๋‚ด๋ถ€์— Bar ์™€ Line ์„ ๋„ฃ์œผ๋ฉด ๋‘˜ ๋‹ค ํ‘œ์‹œ๋œ๋‹ค!

๋‚˜๋Š” Bar ํ˜•ํƒœ๋งŒ ์‚ฌ์šฉํ•  ๊ฑฐ๊ธฐ ๋•Œ๋ฌธ์— BarChart ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ๊ฑฐ๋‹ค.

<BarChart>
  ...
  <Bar
    dataKey={
      (data)=>{
      const range = [data.stck_hgpr, data.stck_lwpr]
      return range}}
    fill= "#E94560"
  >
    {stockData.map((data)=>(
      <Cell fill={(data.prdy_vrss_sign > 3) ? "#006DEE" : "#E94560"}/>
    ))}
  </Bar>
  <Bar dataKey={(e)=>((e.acml_vol)/10000)}/>
</BarChart>

data ์˜ ์–‘์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ ๋ฐ์ดํ„ฐ์—์„œ 10000์„ ๋‚˜๋ˆ ์คฌ๋‹ค.

๋‚˜๋ˆ„์ง€ ์•Š์œผ๋ฉด...

๊ฑฐ๋ž˜๋Ÿ‰ ๋ฐ์ดํ„ฐ๋งŒ ํ‘œ์‹œ๋˜๋Š” ๊ฒŒ ์•„๋‹ˆ๊ณ  ์ฃผ๊ฐ€ ๋ฐ์ดํ„ฐ๋„ ํ‘œ์‹œ๋Š” ๋˜๋Š”๋ฐ ๋„ˆ๋ฌด ์ž‘์•„์„œ ์•ˆ๋ณด์ด๊ฒŒ ๋œ๋‹ค..
๊ฑฐ๋ž˜๋Ÿ‰์˜ ๋‹จ์œ„์™€ ์ฃผ๊ฐ€์˜ ๋‹จ์œ„ ์ฐจ์ด๊ฐ€ ๋„ˆ๋ฌด ํฌ๋‹ˆ๊นŒ ์ด๋ ‡๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ž˜์„œ ์ง„์งœ๋“ค์€

์ฐจํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•ด๋†“๋‚˜๋ณด๋‹ค...

ํ•˜์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ๋˜ ์žˆ๋‹ค

๊ณ ์ •์ ์œผ๋กœ 10000 ์„ ๋‚˜๋ˆ„๋‹ค๋ณด๋‹ˆ ๊ฑฐ๋ž˜๋Ÿ‰์ด ์ ์€ ๊ณณ๋“ค์€ ๋˜....

๋‚˜๋ฅผ ๋„ˆ๋ฌด ํž˜๋“ค๊ฒŒ ํ•œ๋‹ค...

์ด๊ฑด ๊ฐ„๋‹จํ•˜๊ฒŒ for ๋ฌธ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ ๊ฐ™๋‹ค.
์•„ ... ๊ทผ๋ฐ ๊ท€์ฐฎ์€๋ฐ...

์ž ๊น ํž˜์จ๋ณผ๊นŒ.

))

๋‹ค์–‘ํ•œ ๋ฒ”์œ„์—์„œ๋„ ๋น„๊ต์  ์•ˆ์ •์ ์œผ๋กœ ์ž˜ ํ‘œ์‹œํ•ด์ค€๋‹ค.
๋ฌผ๋ก 

์˜ˆ์™ธ๋Š” ์žˆ๋Š” ๊ฑฐ ๊ฐ™๋‹ค.

๋

๋ญ ์–ด์จŒ๋“  ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ฐจํŠธ๋กœ ์™„๋ฒฝํžˆ ๊ตฌํ˜„๋œ ๊ฑด ์•„๋‹ˆ์ง€๋งŒ, ๊ทธ๋Ÿญ์ €๋Ÿญ ๋งŒ์กฑ์Šค๋Ÿฌ์šด ์ฐจํŠธ๊ฐ€ ๋˜์—ˆ๋‹ค!

๊ณ ์ƒํ–ˆ๋‹ค!

์˜ค๋žœ๋งŒ!

์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€

์ถ”๊ฐ€

Docs ๋ฅผ ์ฝ์–ด๋ณด๋‹ค SyncId ๋ผ๋Š” ๊ฑธ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

๐Ÿ˜ฎ?!!

)

๐Ÿ˜ฒ!!!!!!!

์•„๋‹ˆ ๊ทธ๋Ÿผ ํ•˜๋‚˜์˜ Chart ์—์„œ ๋‘ ๊ฐœ์˜ Bar ๋กœ ํ‘œํ˜„ํ•œ ๊ฒŒ ์•„๋‹ˆ๋ผ ๋‘ ๊ฐœ์˜ Chart ๋ฅผ Synchronize ์‹œํ‚จ ๊ฑฐ๊ตฌ๋‚˜!!

๋‘ ๊ฐœ์˜ Chart ๋ฅผ Synchronize ํ•ด ์ง„์งœ ์ฃผ์‹ ์ฐจํŠธ์ฒ˜๋Ÿผ ๋งŒ๋“ค์–ด๋ณด์ž

๋‘ ๊ฐœ์˜ Chart ๋ฅผ Synchronize ํ•ด ์ง„์งœ ์ฃผ์‹ ์ฐจํŠธ์ฒ˜๋Ÿผ ๋งŒ๋“ค๊ธฐ

728x90
๋ฐ˜์‘ํ˜•
LIST
Comments