๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ฑ| Android/๐Ÿ“˜ | ๊ธฐ๋ก

[Android, Kotlin] ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ line chart ๋งŒ๋“ค๊ธฐ

by immgga 2023. 9. 28.

 

์ด๋ฒˆ์— ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์€ android studio์—์„œ ์ฐจํŠธ(๊ทธ๋ž˜ํ”„)๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด ๋ณด์•˜๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŒ…์— ์ฐจํŠธ ๋งŒ๋“ค๊ธฐ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•œ๋‹ค.

์‚ฌ์‹ค ์ž‘๋…„์—๋„ ์ฐจํŠธ๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒฝํ—˜์ด ์žˆ์—ˆ์ง€๋งŒ, ์ด๋ฒˆ์— ๋‹ค์‹œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ฒผ๊ธฐ์— ์ด๋ฒˆ ๊ธฐํšŒ์— ์ •๋ฆฌํ•ด ๋ณด๋ ค ํ•œ๋‹ค.(์ž‘๋…„์— ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚ด์šฉ์„ ๊ฑฐ์˜ ๋‹ค ๊นŒ๋จน์–ด์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๊ณต๋ถ€ํ–ˆ์—ˆ๋‹ค >:( )

 

์ฐจํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์–‘ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ๋‹ค๋ฅธ ๋ถ„๋“ค์ด ๋งŒ๋“ค์–ด์ค€ ์ฐจํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํŽธํ•  ๊ฒƒ์ด๋‹ค.

๊ทธ๋ƒฅ android chart library๋ผ๊ณ  ๊ฒ€์ƒ‰ํ•ด๋„ ๋‹ค๋ฅธ ๋ถ„๋“ค์ด ์ด๋ฏธ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉ ์ค‘์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋‹ค์ˆ˜ ์กด์žฌํ•œ๋‹ค.

์•„๋‹ˆ๋ฉด ์ž์‹ ์ด ์ง์ ‘ custom ํ•ด์„œ ๋งŒ๋“ค๊ณ  ์‹ถ์œผ๋ฉด android์—์„œ ์ œ๊ณตํ•˜๋Š” canvas๋ฅผ ์ด์šฉํ•ด ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”๋ฐ, canvas๋Š” ํ•„์ž๊ฐ€ ์ž˜ ๋ชจ๋ฅด๋Š” ๋‚ด์šฉ์ด๊ธฐ์— ๋‹ค๋ฅธ ๊ธ€์„ ์ฐธ๊ณ ํ•ด์„œ ๋งŒ๋“ค๋ฉด ๋  ๋“ฏํ•˜๋‹ค.

์ด๋ฒˆ์— ์ฐจํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ํ•„์ž๊ฐ€ ์‚ฌ์šฉํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ฐจํŠธ๋ฅผ ๊ทธ๋ ค๋ณธ ์‚ฌ๋žŒ๋“ค์€ ๋Œ€๋ถ€๋ถ„ ์•Œ๊ณ  ์žˆ์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ mpAndroidChart๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฐจํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์•˜๋‹ค.

 

https://github.com/PhilJay/MPAndroidChart

 

GitHub - PhilJay/MPAndroidChart: A powerful ๐Ÿš€ Android chart view / graph view library, supporting line- bar- pie- radar- bubb

A powerful ๐Ÿš€ Android chart view / graph view library, supporting line- bar- pie- radar- bubble- and candlestick charts as well as scaling, panning and animations. - GitHub - PhilJay/MPAndroidChart:...

github.com

์ด ์ฐจํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋‹ค์–‘ํ•œ ์ฐจํŠธ ํ˜•์‹์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„์ฃผ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฒˆ์— ์‚ฌ์šฉํ•œ ์ฐจํŠธ๋Š” ์ œ๋ชฉ์—์„œ๋„ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด line chart๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด๊ฒ ๋‹ค.

 

์ฐจํŠธ๋งˆ๋‹ค ์š”๊ตฌํ•˜๋Š” ํ•ญ๋ชฉ์ด ๋ชจ๋‘ ๋‹ค๋ฅด๊ธฐ์— ์ด์— ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜์ž.

 

์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ line chart(์„  ๊ทธ๋ž˜ํ”„)๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์ž.

 

1. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€

mpAndroidChart๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

setting.gradle.kts(kotlin dsl)

repositories {
    maven { setUrl("https://jitpack.io") }
}

setting.gradle(groovy dsl)

repositories {
    maven { url 'https://jitpack.io' }
}

 

app ๋‹จ์œ„ build.gradle(2023. 09. 27 ๊ธฐ์ค€)

// mp android chart
implementation("com.github.PhilJay:MPAndroidChart:v3.1.0")

 

2. xml์— chart ์ƒ์„ฑํ•˜๊ธฐ

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ dependency๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค๋ฉด, ์ด์ œ๋Š” xml์— ์ฐจํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ๋‹ค.

<com.github.mikephil.charting.charts.LineChart
    android:id="@+id/your_chart_name"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

 

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ๋ฉด lineChart๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ์–ด๋–จ ๋•Œ์—๋Š” ์ฐจํŠธ๋กœ ๋ณด์—ฌ์ค˜์•ผ ํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์„ ๋•Œ์—๋Š” width๊ฐ€ match_parent๋กœ ๊ตฌ์„ฑ๋œ chart๋กœ๋Š” ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ๋“ค์„ ํ™•์ธํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค.(๊ฐ ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ๊ฐ„๊ฒฉ์ด width๊ฐ€ ์ข์€ ๋งŒํผ ์ข์•„์ง€๊ธฐ ๋•Œ๋ฌธ์— ํ™•์ธํ•˜๊ธฐ ํž˜๋“ค๋‹ค.)

 

๊ทธ๋ž˜์„œ mp android chart๋Š” ์ฐจํŠธ๋Š” x์ถ•์„ ๊ธฐ์ค€์œผ๋กœ(๊ฐ€๋กœ) ์Šคํฌ๋กค์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.(์„ธ๋กœ(y์ถ•)๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.)

์ด ์Šคํฌ๋กค ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, kotlin ์ฝ”๋“œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ xml์˜ ์ฝ”๋“œ๋„ ์•ฝ๊ฐ„ ์† ๋ด์ค˜์•ผ(?) ํ•œ๋‹ค.

kotlin ์ฝ”๋“œ๋Š” ๋‚˜์ค‘์— ์ฐจํŠธ ์„ค์ •์„ ์ˆ˜์ •ํ•  ๋•Œ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ณ  xml์—์„œ ๋ฐ”๊ฟ”์•ผ ํ•  ๋ถ€๋ถ„์€

scrollView๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  chart์˜ width๋ฅผ ์ž์‹ ์ด ์›ํ•˜๋Š” ๋งŒํผ ๋Š˜๋ ค์ฃผ๋ฉด ๋œ๋‹ค.

<HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        android:scrollbars="horizontal">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent">

            <!-- add your chart code. -->
        </LinearLayout>
    </HorizontalScrollView>

๊ฐ€๋กœ๋กœ ์Šคํฌ๋กค๋ผ์•ผ ํ•˜๊ธฐ์— horizontalScrollView๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

๋˜ํ•œ scrollView ์•ˆ์—๋Š” LinearLayout์„ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋ง์ž.

 

๊ทธ๋ฆฌ๊ณ  linearLayout์— chart๋ฅผ ๋„ฃ์„ ๋•Œ ๋˜ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์ด ์žˆ๋Š”๋ฐ width๋ฅผ match_parent๋กœ ์„ค์ •ํ•˜๋ฉด chart์˜ width๊ฐ€ ํ™”๋ฉด์— ๋”ฑ ๋งž๊ฒŒ ๋งž์ถฐ์ง€๊ธฐ ๋•Œ๋ฌธ์— scroll์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.

์Šคํฌ๋กค์ด ๋˜๊ฒŒ ํ•˜๋ ค๋ฉด xml์˜ ํ™”๋ฉด์„ ๋„˜๊ธธ ๋งŒํผ width๋ฅผ ์•„์ฃผ ํฌ๊ฒŒ ์„ค์ •ํ•ด ์ฃผ์–ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค.

 

์ฐจํŠธ ์ƒ์„ฑ์ด ๋ชจ๋‘ ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฉด ์ด์ œ๋Š” ์ฝ”๋“œ ๋ถ€๋ถ„์—์„œ ์ฐจํŠธ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ ๋ฐ ์ฐจํŠธ ์ˆ˜์ •์„ ํ•ด์•ผ ํ•  ์ฐจ๋ก€์ด๋‹ค.

 

3. chart ์ƒ์„ฑ ๋ฐ ์ˆ˜์ •

chart๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์ „์— ๋จผ์ € chart๋กœ ๋ณด์—ฌ์ค„ data๋“ค์„ ๋งŒ๋“ค์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

chart์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๊ธฐ ์œ„ํ•ด chart์— ๊ฐ ๋ฐ์ดํ„ฐ์˜ ์ขŒํ‘œ๋ฅผ ์ง€์ •ํ•˜๋Š” arrayList๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์ž.

val chartEntry = arrayListOf<Entry>()

Entry()๋กœ x์ถ•๊ณผ y์ถ•์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.(Entry(x =?, y =?) x, y๋Š” floatํ˜•์ด๋‹ค.)

 

์ด์ œ ์ž์‹ ์ด ์ƒ์„ฑํ•œ list์—์„œ chart๋กœ ๋ณด์—ฌ์ค„ ๋ถ€๋ถ„์„ chartArray์˜ y์ถ•์œผ๋กœ ๋„ฃ์–ด ์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  x์ถ•์€ 0๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์ฆ๊ฐ€ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—(x๊ฐ€ ๊ฐ™์œผ๋ฉด ํ•œ ๋ถ€๋ถ„์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ๋ชจ์ด๋Š” ๊ด‘๊ฒฝ์„ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค ใ…Žใ…Ž) for๋ฌธ ๋“ฑ ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด์•ผ ํŽธํ•˜๋‹ค.

list.forEachIndexed { index, listItem ->
    chartEntry.add(Entry(x=index.toFloat(), y=/*์ฐจํŠธ์— ๋ณด์—ฌ์ค„ ๋ฐ์ดํ„ฐ*/.toFloat()))
}

forEachIndexed๋ฅผ ์ด์šฉํ•˜๋ฉด index์™€ list์˜ item๋“ค์„ ๋ชจ๋‘ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ € ์ž‘์—…๊นŒ์ง€ ์™„๋ฃŒํ•˜๋ฉด chart์— ๋ณด์—ฌ์ค„ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ์ž‘์—…์€ ์™„๋ฃŒํ•œ ๊ฒƒ์ด๋‹ค!

 

์ด์ œ ์ง„์งœ๋กœ chart๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์ž.

lineChart๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด lineChart๋งŒ์„ ์œ„ํ•œ(?) dataSet์ด ํ•„์š”ํ•˜๋‹ค.

val chartDataSet = LineDataSet(chartData, "")

๋’ค์˜ string parameter๋Š” label๋กœ ๋”ฑํžˆ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋นˆ ๋ฌธ์ž์—ด๋กœ ์ ์–ด์ฃผ์–ด๋„ ์ƒ๊ด€์—†๋‹ค.

๋‹ค์Œ์—๋Š” ์ƒ์„ฑํ•œ dataSet์„ ์ด์šฉํ•ด chart์— data๋ฅผ ์„ค์ •ํ•ด ์ฃผ๊ณ  chart๋ฅผ invalidate ํ•ด์ฃผ๋ฉด ๊ธฐ๋ณธ์ ์ธ ์ฐจํŠธ ์ƒ์„ฑ์€ ๋๋‚œ๋‹ค.

binding.yourChartName.apply {
    data = LineData(chartDataSet)
    invalidate()
}

 

์ฐจํŠธ ์ƒ์„ฑ์„ ์™„๋ฃŒํ–ˆ์œผ๋‹ˆ ์ด์ œ ์ฐจํŠธ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

์ฐจํŠธ์˜ ์†์„ฑ์€ ํฌ๊ฒŒ 3๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

x์ถ•, y์ถ•, chart item์ด ์žˆ๊ฒ ๋‹ค.

x, y๋Š” ๊ฐ๊ฐ ์ถ•์— ๋Œ€ํ•œ ์„ค์ •์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.(y์ถ•์˜ ๊ฒฝ์šฐ์—๋Š” ์˜ค๋ฅธ์ชฝ ์ถ•, ์™ผ์ชฝ ์ถ•์œผ๋กœ ์ด๋ฆ„ ์ง€์–ด์ ธ ์žˆ๋‹ค.)

chart item์—์„œ๋Š” dataSet์—์„œ ์„ค์ •ํ•œ item๋“ค์ด ๋ณด์ด๋Š” ์†์„ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

 

x์ถ•๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๋ณด๊ฒ ๋‹ค.

x์ถ• ์ˆ˜์ • ๋ฐฉ๋ฒ•์€ chart ์•ˆ์—์„œ xAxis๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

binding.yourChartName.xAxis.apply {
    /*x์ถ• ์†์„ฑ ๋ณ€๊ฒฝ*/
}

์ด๋ฒˆ์— ํ•„์ž๊ฐ€ ์‚ฌ์šฉํ–ˆ๋˜ ์†์„ฑ๋“ค๋งŒ ์„ค๋ช…ํ•ด ์ฃผ๊ฒ ๋‹ค.

์›๋ž˜๋Š” ๋งค์šฐ ๋‹ค์–‘ํ•œ ์†์„ฑ๋“ค์ด ์กด์žฌํ•˜์ง€๋งŒ, ํ•„์ž๋„ ์ž˜ ๋ชจ๋ฅด๋Š” ํ•ญ๋ชฉ๋„ ๋งŽ๊ณ  ๋ถ„๋Ÿ‰์ด ๋งŽ์ด ๊ธธ์–ด์งˆ ๋“ฏํ•ด์„œ ํ•„์ž๊ฐ€ ์‚ฌ์šฉํ•œ ์†์„ฑ๋“ค๋งŒ ์•Œ๋ ค ์ฃผ๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ๋จผ์ € ์‚ฌ์šฉํ•œ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ๋ณด๊ฒ ๋‹ค.

xAxis.apply {
    position = XAxis.XAxisPosition.BOTTOM
    valueFormatter = IndexAxisValueFormatter(xAxisTitleData)
    setLabelCount(xAxisTitleData.size, true)
}
  • position: x์ถ•์˜ ํ‘œ์‹œ ์œ„์น˜๋ฅผ ์„ค์ •ํ•œ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ TOP์ด๋‹ค.
  • valueFormatter: chart data๋งˆ๋‹ค์˜ label์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํ•ญ๋ชฉ์ด๋‹ค. ํ•„์ž๋Š” IndexAxisValueFormatter๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ปค์Šคํ…€ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • setLabelCount: chart์˜ label์˜ ๊ฐœ์ˆ˜๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‘ ๋ฒˆ์งธ parameter๋Š” force๋กœ true๋กœ ์„ค์ •ํ•˜๋ฉด label์„ ๋ฐ˜๋“œ์‹œ ๋ณด์—ฌ์ค€๋‹ค.

 

๋‹ค์Œ์€ y์ถ•์˜ ์†์„ฑ์„ ๋ณผ ์ฐจ๋ก€์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ํ•„์ž๋Š” y์ถ•์— ๊ด€๋ จ๋œ ํ•ญ๋ชฉ์€ ํ•˜๋‚˜๋„ ์†๋Œ€์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ถ€๋ถ„์€ ์ƒ๋žตํ•˜๊ณ  ์ฐธ๊ณ  ์ž๋ฃŒ๋กœ ๋Œ€์ฒดํ•˜๊ฒ ๋‹ค,

https://namget.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-MPAndroidChart-LineChart-%EC%86%8D%EC%84%B1-%EC%A0%95%EB%A6%AC-Example

 

[์•ˆ๋“œ๋กœ์ด๋“œ] MPAndroidChart LineChart ์†์„ฑ ์ •๋ฆฌ (Example)

์•ˆ๋…•ํ•˜์„ธ์š” YTS ์ž…๋‹ˆ๋‹ค.์˜ค๋Š˜์€ Chart ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ํŒ์™• MPAndroidChart ์†์„ฑ์— ๋Œ€ํ•ด ์ ์–ด๋ณด๋ คํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค์€ ์ž๊พธ ํ• ๋•Œ๋งˆ๋‹ค ์†์„ฑ์„ ์žƒ์–ด๋ฒ„๋ ค์„œ์š”.... ใ…Žใ…Žใ…Žใ…Ž ์šฐ์„  https://github.com/PhilJay/MPAndroidChart

namget.tistory.com

์ด ํฌ์ŠคํŒ…์—์„œ ๋‹ค์–‘ํ•œ ์ฐจํŠธ ์†์„ฑ์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ chart item ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์ด๋‹ค.

chartDataSet.apply {
    lineWidth = 3f
    circleRadius = 6f
    color = resources.getColor(R.color.black, null)
    setCircleColor(R.color.button_unselected)
    mode = LineDataSet.Mode.CUBIC_BEZIER
    valueTextSize = 10f
}
  • lineWidth: lineChart์˜ line์˜ ๋‘๊ป˜๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.
  • circleRadius: chart์—์„œ๋Š” ํ•ญ๋ชฉ์ด ๋‘ฅ๊ทผ ์›์œผ๋กœ ๋‚˜์˜ค๋Š”๋ฐ, ์›์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ ค์ค€๋‹ค.
  • mode: lineChart์˜ mode๋ฅผ ์„ค์ •ํ•œ๋‹ค. ํ•„์ž๊ฐ€ ์‚ฌ์šฉํ•œ mode๋Š” cubic_bezier๋กœ chart data ๊ฐ„์˜ line์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ(๋‘ฅ๊ธ€๊ฒŒ) ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.(linear, stepped, cubic_bezier, horizontal_bezier ์ด 4๊ฐœ์˜ mode๊ฐ€ ์กด์žฌํ•œ๋‹ค.)
  • valueTextSize: chart data๊ฐ€ ๋ณด์—ฌ์ฃผ๋Š” value text์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.

 

4. ์ž‘์—… ๊ฒฐ๊ณผ

๊ฐ„๋‹จํ•˜๊ฒŒ ํ•„์ž๊ฐ€ ๋งŒ๋“  ์ฐจํŠธ ์ƒ˜ํ”Œ ์‚ฌ์ง„์„ ๋ณด์—ฌ ์ฃผ๊ฒ ๋‹ค.

 

์ •๋ฆฌ

 


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

ํ•˜์ง€๋งŒ ์ฐจํŠธ ์†์„ฑ์ด ๋งค์šฐ ๋‹ค์–‘ํ•ด์„œ ๋ชจ๋“  ์†์„ฑ์„ ์™„๋ฒฝํžˆ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ƒ๋‹นํžˆ ์–ด๋ ค์šธ ๊ฒƒ ๊ฐ™๋‹ค.

๋‹ค์–‘ํ•œ ์ฐจํŠธ๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒํ™ฉ์— ๋งž๋Š” ์ฐจํŠธ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 

์ž˜๋ชป๋œ ์ •๋ณด๋‚˜ ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์•Œ๊ณ  ๊ณ„์‹  ๋ถ„๋“ค์˜ ๋Œ“๊ธ€ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

 

์ฐธ๊ณ ํ•œ ๊ธ€

https://velog.io/@hyehyes/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-MPAndroidChart%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-LineChart-%EC%82%AC%EC%9A%A9

 

[์•ˆ๋“œ๋กœ์ด๋“œ] MPAndroidChart๋ฅผ ํ™œ์šฉํ•œ LineChart ์‚ฌ์šฉ

์ง€๋‚œ ๊ธ€์ด์—ˆ๋˜ HorizontalBarChart์— ์ด์–ด์„œ MPAnroidChart์˜ LineChart์— ๋Œ€ํ•˜์—ฌ ์„ค๋ช…ํ•  ๊ฒƒ์ด๋‹ค. LineChart View ์ถ”๊ฐ€ xml ๋ ˆ์ด์•„์›ƒ์— com.github.mikephil.charting.charts.LineChart ๋ฅผ ์ถ”

velog.io

https://programmmingphil.tistory.com/16

 

MPAndroidChart ๊ฐ€๋กœ ๊บพ์€์„  ๊ทธ๋ž˜ํ”„

WITHUB ์–ดํ”Œ์„ ์ œ์ž‘ํ•  ๋•Œ ์‚ฌ์šฉ์ž์˜ ํ•œ ๋‹ฌ ๊นƒํ—ˆ๋ธŒ ์ปค๋ฐ‹ ํšŸ์ˆ˜๋ฅผ ๊ฐ€๋กœ ๊บพ์€์„  ๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚ด์•ผ ํ–ˆ๋‹ค. - ์ดˆ๊ธฐ ์„ค์ • //app ์ˆ˜์ค€์— ์ถ”๊ฐ€ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //settings.gradle์— ์ถ”๊ฐ€ m

programmmingphil.tistory.com

728x90