Charts: μ• λ‹ˆλ©”μ΄μ…˜ μ—…λ°μ΄νŠΈ

에 λ§Œλ“  2015λ…„ 07μ›” 07일  Β·  21μ½”λ©˜νŠΈ  Β·  좜처: danielgindi/Charts

μ•ˆλ…•ν•˜μ„Έμš”!
LineChartView 데이터(ChartData)λ₯Ό μ—…λ°μ΄νŠΈν•˜κ³  ν˜„μž¬ μœ„μΉ˜μ—μ„œ μ• λ‹ˆλ©”μ΄μ…˜λœ LineChartViewλ₯Ό λ‹€μ‹œ κ·Έλ¦¬λŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ?
appFigures μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œμ²˜λŸΌ.
감사 ν•΄μš”.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

2년이 λ„˜μ—ˆλŠ”λ° μ–΄λ–»κ²Œ κ΅¬ν˜„ν•˜λŠ”μ§€ μ•„μ‹œλŠ” λΆ„ κ³„μ‹ κ°€μš”?

λͺ¨λ“  21 λŒ“κΈ€

사싀 이미 μƒκ°ν•˜κ³  κ΅¬ν˜„ν•˜λ €κ³  ν•˜λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.
μš°λ¦¬λŠ” μ§€κΈˆ λ§Žμ€ 것을 가지고 μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ κ·Έ λ™μ•ˆ 이것이 λ‹Ήμ‹ μ—κ²Œ 정말 μ€‘μš”ν•˜λ‹€λ©΄ λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

데이터 μ„ΈνŠΈ _A_, 데이터 μ„ΈνŠΈ _B_ 및 0 와 1 μ‚¬μ΄μ˜ _phase_ 값을 μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“­λ‹ˆλ‹€.
이 κΈ°λŠ₯은 λ‹€μŒμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  1. μƒˆ 데이터 μ„ΈνŠΈ μ •μ˜ _C_
  2. _A_의 각 값을 λ°˜λ³΅ν•˜κ³  C[i] = (B[i] - A[i]) * phase + A[i]
  3. μƒˆ 데이터 μ„ΈνŠΈλ‘œ _C_λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

이제 0 μ—μ„œ 1 κΉŒμ§€μ˜ κ°„λ‹¨ν•œ μˆ«μžμ— μ• λ‹ˆλ©”μ΄μ…˜μ„ μ μš©ν•˜κ³  "from" 데이터 μ„ΈνŠΈ 및 "to" 데이터 μ„ΈνŠΈμ™€ ν•¨κ»˜ ν•¨μˆ˜μ— 전달해야 ν•©λ‹ˆλ‹€. κ²°κ³ΌλŠ” 차트 보기둜 μ „λ‹¬λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€ :-)

μ°¨νŠΈμ—μ„œ μ• λ‹ˆλ©”μ΄μ…˜ μœ ν‹Έλ¦¬ν‹°λ₯Ό μ‚¬μš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 이 μœ ν‹Έλ¦¬ν‹°λŠ” μ—¬μœ μ™€ 물건을 ν¬ν•¨ν•˜μ—¬ 이미 μˆ«μžμ— μ• λ‹ˆλ©”μ΄μ…˜μ„ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ·Έλž˜μ„œ 그것은 거의 μΌ€μ΄ν¬μ˜ λ³΅μˆ­μ•„μ΄κ³ , λ‚΄κ°€ ν•  수 μžˆλŠ” ν•œ 빨리 이것을 λΌμ΄λΈŒλŸ¬λ¦¬μ— μΆ”κ°€ν•  κ³„νšμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 적어도 κ·Έ λ™μ•ˆμ—λŠ” 해결책이 μžˆμŠ΅λ‹ˆλ‹€ ;-)

μ•ˆλ…•ν•˜μ„Έμš”! 이미 κ΅¬ν˜„λœ κΈ°λŠ₯μΈκ°€μš”?

데이터 μ„ΈνŠΈμ— μƒˆ 값을 μΆ”κ°€ν•˜κ³  ν•œκ³„μ„ μ˜ μœ„μΉ˜λ₯Ό β€‹β€‹λ³€κ²½ν•˜λŠ” μ• λ‹ˆλ©”μ΄μ…˜μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”, μ €λŠ” 파이 μ°¨νŠΈμ—μ„œ 데이터 λ³€κ²½ μ• λ‹ˆλ©”μ΄μ…˜μ„ μ μš©ν•˜λ €κ³  ν•©λ‹ˆλ‹€. 이미 μ–ΈκΈ‰ν•œ κΈ°λŠ₯이 μžˆμ§€λ§Œ "0μ—μ„œ 1둜 κ°„λ‹¨ν•œ μˆ«μžμ— μ• λ‹ˆλ©”μ΄μ…˜ 효과λ₯Ό μ£ΌλŠ”" 방법을 μ°ΎλŠ” 데 어렀움을 κ²ͺκ³  μžˆμŠ΅λ‹ˆλ‹€. 이에 λŒ€ν•œ 생각이 μžˆμŠ΅λ‹ˆκΉŒ? 감사 ν•΄μš”!

μ—¬λ³΄μ„Έμš”! κΈ°λŠ₯이 이미 κ΅¬ν˜„λ˜μ–΄ μžˆμŠ΅λ‹ˆκΉŒ?

이 κΈ°λŠ₯에 λŒ€ν•œ 지원을 μΆ”κ°€ν•˜κ³  일뢀 μ™„ν™” κΈ°λŠ₯에 따라 κ°„λ‹¨ν•œ 값을 λ³΄κ°„ν•˜λŠ” 쒋은 방법을 μ°Ύκ³  μžˆμŠ΅λ‹ˆλ‹€(ν•΄κ²° λ°©λ²•μš©). λͺ¨λ“  μ• λ‹ˆλ©”μ΄μ…˜ λΌμ΄λΈŒλŸ¬λ¦¬λŠ” 보기 λ˜λŠ” μ†μ„±μ—μ„œ μž‘λ™ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ λ‹¨μˆœν•œ 숫자의 값을 "μ• λ‹ˆλ©”μ΄μ…˜"ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. λ‹¨μˆœν•΄μ•Ό ν•˜λŠ” 것 κ°™κ΅°μš”. μ œκ°€ 잘λͺ»λœ 곳을 μ°Ύκ³  μžˆλŠ” 것은 μ•„λ‹κΉŒμš”?

λ‚΄ μ†”λ£¨μ…˜μ„ κ³΅μœ ν•œ μ•„λž˜ κ²Œμ‹œλ¬Όμ„ 보고 싢을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 그것이 μ™„λ²½κ³ΌλŠ” 거리가 λ©€λ‹€λŠ” 것을 μ•Œκ³  μžˆμ§€λ§Œ μž‘λ™ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. http://stackoverflow.com/questions/34730917/animating-a-double-from-0-to-1-in-swift-over-a-specified-interval/34774113#34774113

@apiejh λΉ λ₯Έ λ‹΅λ³€ κ°μ‚¬ν•©λ‹ˆλ‹€. 정말 κ°μ‚¬ν•©λ‹ˆλ‹€. λ‚˜λŠ” 이것을 타이머 κΈ°λŠ₯으둜 μž‘λ™μ‹œν‚¬ 수 μžˆμ—ˆλ‹€. Hacky, ν•˜μ§€λ§Œ μž‘λ™ν•©λ‹ˆλ‹€! 적어도 더 λ‚˜μ€ μ ‘κ·Ό 방식을 μ‚¬μš©ν•  수 μžˆμ„ λ•ŒκΉŒμ§€λŠ”.

이에 λŒ€ν•œ μ—…λ°μ΄νŠΈ λ˜λŠ” κ°€λŠ₯ν•œ μ†”λ£¨μ…˜μ΄ μžˆμŠ΅λ‹ˆκΉŒ?

+1, 데이터가 ν¬ν•¨λœ μ°¨νŠΈκ°€ 있고 일뢀 비동기 ν”„λ‘œμ„ΈμŠ€κ°€ μ™„λ£Œλ˜λ©΄ ν•˜λ‚˜ μ΄μƒμ˜ μƒˆ 데이터 μ„ΈνŠΈλ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ 데이터 μ„ΈνŠΈμ˜ 데이터 포인트(예: _라이브 데이터_)λ₯Ό ν™•μž₯ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. μ°¨νŠΈκ°€ μ²˜μŒλΆ€ν„° λ‹€μ‹œ μž‘μ„±ν•˜λŠ” λŒ€μ‹  μƒˆ 데이터 μ„ΈνŠΈμ— μ• λ‹ˆλ©”μ΄μ…˜μ„ μ μš©ν•  수 μžˆλ‹€λ©΄ 훨씬 더 λˆˆμ„ 즐겁게 ν•  κ²ƒμž…λ‹ˆλ‹€.

@kevinjtchen 이 https://github.com/danielgindi/Charts/pull/2889에 λŒ€ν•œ PR을 κ²Œμ‹œν–ˆμŠ΅λ‹ˆλ‹€.

"μ°¨νŠΈμ—μ„œ μ• λ‹ˆλ©”μ΄μ…˜ μœ ν‹Έλ¦¬ν‹°λ₯Ό μ‚¬μš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 이 μœ ν‹Έλ¦¬ν‹°λŠ” μ—¬μœ μ™€ 물건을 ν¬ν•¨ν•˜μ—¬ 이미 μˆ«μžμ— μ• λ‹ˆλ©”μ΄μ…˜μ„ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€."

단일 데이터 μ„ΈνŠΈμ—λ§Œ 전체 차트λ₯Ό μ• λ‹ˆλ©”μ΄μ…˜ν™”ν•˜λŠ” μ˜΅μ…˜μ΄ ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ λ­”κ°€λ₯Ό λ†“μΉ˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

2년이 λ„˜μ—ˆλŠ”λ° μ–΄λ–»κ²Œ κ΅¬ν˜„ν•˜λŠ”μ§€ μ•„μ‹œλŠ” λΆ„ κ³„μ‹ κ°€μš”?

이것이 κ΅¬ν˜„λ  μ˜ˆμ •μž…λ‹ˆκΉŒ? λ‚˜λŠ” λ‹€μŒκ³Ό 같이 κ°„λ‹¨ν•œ 것을 ν•  수 있기λ₯Ό μ›ν•œλ‹€.

lineChart.animate(to: newDataSet, duration: 1.0);

setupChart()λ₯Ό λ‹€μ‹œ ν˜ΈμΆœν•˜κΈ° 전에 이전 κ°’μ˜ 배열을 μ§€μš°κ³  μƒˆ κ°’μœΌλ‘œ μ±„μš°μ‹­μ‹œμ˜€.

벌써 2019년인데 전체 차트λ₯Ό μ²˜μŒλΆ€ν„° λ‹€μ‹œ 그리지 μ•Šκ³  데이터 λ³€κ²½ 사항을 μ• λ‹ˆλ©”μ΄μ…˜ν™”ν•˜λŠ” μ†”λ£¨μ…˜μ΄ μžˆμŠ΅λ‹ˆκΉŒ? πŸ™‚

2년이 λ„˜μ—ˆλŠ”λ° μ–΄λ–»κ²Œ κ΅¬ν˜„ν•˜λŠ”μ§€ μ•„μ‹œλŠ” λΆ„ κ³„μ‹ κ°€μš”?

이제 4년이 λ„˜μ—ˆμŠ΅λ‹ˆλ‹€. μš°λ¦¬κ°€ 이것을 얻지 λͺ»ν•  것이라고 λ§ν•˜λŠ” 것이 μžˆμŠ΅λ‹ˆλ‹€ :(

PR #2889κ°€ λ‹«νžŒ μ΄μœ λŠ” ν™•μ‹€ν•˜μ§€ μ•Šμ§€λ§Œ danielgindis κ΅¬ν˜„μ„ μœ„ν•œ λΉ λ₯Έ μ½”λ“œ 쑰각을 μ›ν•˜λŠ” μ‚¬λžŒλ“€μ„ μœ„ν•΄: https://github.com/mrjko/testCharts/blob/master/chartsTest/BarChartViewController/BarChartViewController.swift

lineChart에 λŒ€ν•΄ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 방법을 μ•„λŠ” μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ? 전체 차트λ₯Ό λ‹€μ‹œ 그리지 μ•Šκ³  점 μœ„μΉ˜λ₯Ό λΆ€λ“œλŸ½κ²Œ λ³€κ²½ν•΄μ•Ό ν•©λ‹ˆλ‹€.

@vittorionapoli μœ„μ— κ²Œμ‹œλœ @mrjko 와 λ™μΌν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμ§€λ§Œ LineChartDataSet으둜 λŒ€μ²΄

func partialResults(setA: LineChartDataSet, setB: LineChartDataSet, phase: Double) -> LineChartDataSet {
    let newSet = LineChartDataSet()

    for index in 0..<setA.entries.count {
        let currA = setA.entries[index].y
        let currB = setB.entries[index].y

        let newValue = (currB - currA) * phase + currA
        newSet.append(BarChartDataEntry(x: Double(index), y: newValue))
    }

    return newSet
}

@mrjko μœ„μ˜ 방법은 λˆ„μ  λ§‰λŒ€ 차트 의 yValues λ°°μ—΄ 에 λŒ€ν•΄ μ–΄λ–»κ²Œ μž‘λ™ν•©λ‹ˆκΉŒ?
BarChartDataEntry(x: Double(index), yValues: [anArrayOfyValues])

μ œμ‹œλœ μ†”λ£¨μ…˜μ„ LineChartDataSet μ—…λ°μ΄νŠΈν•˜κ³  setA 와 setB κ°€ λ‹€λ₯Έ 경우 dataSetμ—μ„œ μƒˆ 값을 μΆ”κ°€/μ œκ±°ν•©λ‹ˆλ‹€.

    func partialResults(setA: LineChartDataSet, setB: LineChartDataSet, phase: Double) -> LineChartDataSet {
        let newSet = LineChartDataSet()
        let setACount = setA.entries.count
        let setBCount = setB.entries.count

        for index in 0..<min(setACount, setBCount) {
            let currA = setA.entries[index].y
            let currB = setB.entries[index].y

            let newValue = (currB - currA) * phase + currA
            newSet.append(ChartDataEntry(x: Double(index), y: newValue))
        }

        let diff = abs(setACount - setBCount)
        if setACount < setBCount {
            for index in setBCount - diff..<setBCount {
                let currB = setB.entries[index].y
                let newValue = currB
                newSet.append(ChartDataEntry(x: Double(index), y: newValue))
            }
        } else if setACount > setBCount {
            for index in setACount - diff..<setACount {
                let currA = setA.entries[index].y
                let newValue = currA
                newSet.append(ChartDataEntry(x: Double(index), y: newValue))
            }
        }

        return newSet
    }

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰