๊ฐœ๋ฐœ ๐Ÿพ/์ผํ•˜๊ณ ,์ •๋ฆฌํ•˜๊ธฐ

React amchart ๋ฅผ ํ•˜๋ฉด์„œ~!

JOTOKKI 2023. 1. 6. 16:42
728x90

๋ฒ„์ „์€ amchart5 ๋กœ ์ง„ํ–‰ ํ–ˆ๋‹ค. 

๋งŽ์ด ์“ฐ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ ๋งŒํผ ๋ฏธ๋ฆฌ ์ •๋ฆฌ๋ฅผ ํ•ด๋‘์–ด์„œ ์ถ”ํ›„์—๋Š” ๊ฐ™์€๊ฑธ ๊ฒ€์ƒ‰ํ•˜๋ฉด์„œ ์‹œ๊ฐ„๋‚ญ๋น„๋ฅผ ํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋‚˜์”ฉ ๋‚˜์˜ฌ๋•Œ๋งˆ๋‹ค ์ •๋ฆฌ๋ฅผ ํ•ด๋‘์–ด์•ผ ๊ฒ ๋‹ค. 

 

1. axis์˜ x, y ์ปฌ๋Ÿผ์‚ฌ์ด์ฆˆ ์กฐ์ •

๋ฐ์ดํ„ฐ๋Š” 4๊ฐœ์ธ๋ฐ, ํ™”๋ฉด์‚ฌ์ด์ฆˆ๊ฐ€ ์ž‘๋‹ค๋ณด๋‹ˆ amchart์—์„œ ์ž๋™์œผ๋กœ 2๊ฐœ๋งŒ label ์„ ํ‘œ์‹œํ•˜๋Š” ํ˜„์ƒ์ด ์žˆ์—ˆ๋‹ค. 

 

์˜ˆ์‹œ ํ™”๋ฉด

๊ทธ๋ž˜์„œ x์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ค„์ด๊ฑฐ๋‚˜ ํ•ด์ฃผ๋Š” ์˜ต์…˜์ด ์žˆ์„๊บผ ๊ฐ™์•„์„œ ์—ด์‹ฌํžˆ width๋‚˜ min, max ๋ฅผ ์—ด์‹ฌํžˆ ์ฐพ์•„๋ณด์•˜๋Š”๋ฐ, 

์ •๋‹ต์€ render๋ฅผ ํ• ๋•Œ ์ตœ์†Œ grid distance ๊ฐ’์„ ์กฐ์ •ํ•ด์ฃผ๋ฉด ๋˜์—ˆ๋‹ค~ ๐Ÿ˜ฅ

x๋ฟ๋งŒ์•„๋‹ˆ๋ผ y์˜ ๊ฐ’์„ ์กฐ์ •ํ•˜๊ณ  ์‹ถ์œผ๋ฉด ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ y์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค๋•Œ ๊ฐ™์€ ์˜ต์…˜๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค~

let xAxis = chart.xAxes.push(
    am5xy.CategoryAxis.new(root, {
        renderer: am5xy.AxisRendererX.new(root, {
            minGridDistance: 25, // <- 25๋ฉด 100/25 ์˜ ๊ฐ’๋งŒํผ ๋ณด์—ฌ์ค€๋‹ค.(์ฆ‰, 25๋ฉด ์ด 4๊ฐœ)
        }),
        categoryField: "name",
    })
);

 

2. label์˜ ์‚ฌ์ด์ฆˆ์กฐ์ •, ๋†’์ด ์กฐ์ •

์‚ฌ์ด์ฆˆ์˜ ๊ฒฝ์šฐ theme์„ ๋”ฐ๋กœ ์ ์šฉ ์‹œ์ผฐ๋Š”๋ฐ, theme์„ ๋”ฐ๋กœ ์ ์šฉ ํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์˜ต์…˜์„ ์ ์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ๋‹ค. theme์„ ์ ์šฉ์‹œํ‚ค๋ ค๋ฉด, ๋ถˆ๋Ÿฌ์˜จ am5์—์„œ Theme์„ ๋”ฐ๋กœ ๋ถˆ๋Ÿฌ์™€ ๋ณ€์ˆ˜์— ์„ ์–ธํ•˜๊ณ  ๊ทธ์•ˆ์—์„œ ์กฐ์ •ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’์„ set์„ ํ†ตํ•ด ์ ์šฉ ์‹œ์ผœ์ฃผ๋ฉด ๋œ๋‹ค. 

(์ฐธ์กฐ: https://www.amcharts.com/docs/v5/concepts/themes/ )

let myTheme = am5.Theme.new(root); // theme ์„ ์–ธ
myTheme.rule("Label").set("fontSize", "0.8em"); // label ํฐํŠธ ํฌ๊ธฐ ์กฐ์ •

axis X์˜ label ์ด ๋„ˆ๋ฌด ๋ถ™์–ด์žˆ์–ด์„œ ์•„๋ž˜๋กœ ์ข€ ๋„๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ, 

์ด๋•Œ๋Š” ๋ณ„๋„ theme์ ์šฉ ์—†์ด ๋ฐ”๋กœ labels์— ์ ‘๊ทผํ•˜์—ฌ setting์„ ํ•ด์ฃผ์—ˆ๋‹ค. 

xAxis.get("renderer").labels.template.setAll({
    paddingTop: 20
});

๊ฒฐ๊ณผ ์ด๋ฏธ์ง€

์ด๋ ‡๊ฒŒ ํ•ด์„œ ์›ํ•˜๋Š” ๋ชจ์–‘์˜ ์ฐจํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

๋ฆฌ์•กํŠธ์—์„œ ์ฐจํŠธ๋ฅผ ์ ์šฉํ•˜๋Š” ๋ถ€๋ถ„์€ ๋”ฐ๋กœ ์ •๋ฆฌํ•ด์„œ ๋‚˜์ค‘์— ํฌ์ŠคํŒ… ํ•ด๋ณผ๊นŒ ํ•œ๋‹ค~ 


์ผ๋ถ€ ๋‚ด์šฉ์„ ๋” ์ถ”๊ฐ€ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. 

์ฐจํŠธ๋ฅผ ํด๋ฆญํ–ˆ์„๋•Œ ๋™์ž‘ํ•˜๋Š” ๋ชจ์…˜์„ ์—†์• ๊ณ ์ž ์ฐพ์•„๋ดค๋‹ค. 

ref: https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/pie-series/

 

Disabling pull-out ๋ถ€๋ถ„์„ ๋ณด๋ฉด ๋˜๋Š”๋ฐ, 

toggleKey๊ฐ’์„ none์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค. (๊ธฐ๋ณธ์€ true ์„ค์ • ๋˜์–ด์žˆ๋‹ค.)

series.slices.template.set("toggleKey", "none");

๊ทธ๋ฆฌ๊ณ  ํด๋ฆญ์‹œ pull-out๋˜๋Š” ์‚ฌ์ด์ฆˆ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด 

pieSeries.slices.template.states.create("active", {
	shiftRadius: 10, // <- ๊ธฐ๋ณธ์ด 20์ •๋„์ธ๊ฒƒ๊ฐ™๋‹ค. 
});

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์กฐ์ •ํ•˜๋ฉด ๋œ๋‹ค. 

๋ฐ˜์‘ํ˜•