📂
CMiOSBook
  • CMoney iOS Book
  • Coding 101
    • Value / Reference Type
    • ARC + Retain Cycle
    • 物件之間的溝通方式
  • 工具主題
    • 基本工具篇
    • Git 篇
  • 架構主題
    • MVC
  • CodingStyle主題
    • CodingStyle 規則
      • 專案(Project)
      • 命名(Naming)
      • 程式格式(Format)
      • 註解(Comment)
      • 類別與結構(Classes and Structures)
      • 修飾詞(Modifier)
      • 閉包表達式(Closures)
    • 靜態檢查器
    • 專案基本規定
  • UI主題
    • UIScrollViewDelegate & UITableViewDelegate
  • Charts主題
    • 簡介
    • Lesson1 Chart Setup
    • Lesson2 Chart Data
    • Lesson3 CombinedChartView
    • Lesson4 Renderer
  • Test主題
    • 單元測試的基本概念
    • XCTest-UnitTest
    • XCTest-UITest
  • 學習資源
    • 相關網站
    • 相關會議與社群
    • 計算機考題
Powered by GitBook
On this page
  • 圖表優化
  • axisDependency介紹

Was this helpful?

  1. Charts主題

Lesson3 CombinedChartView

多資料的圖表實作

PreviousLesson2 Chart DataNextLesson4 Renderer

Last updated 4 years ago

Was this helpful?

範例:

一般用到K線圖得地方 都會需要參考線

使用CombinedChartView實作

@IBOutlet weak var chart: CombinedChartView!

只要照之前步驟多生產一個LineChartData即可實作出來

private func getLData() -> LineChartData {
    var enties: [ChartDataEntry] = []
    for (i, data) in lineDatas.enumerated() {
        let e = ChartDataEntry(x: Double(i), y: data.price)
        enties.append(e)
    }
    let set1 = setLDataSet(enties: enties)
    let cData = LineChartData(dataSet: set1)
    return cData
}

private func setLDataSet(enties: [ChartDataEntry]) -> LineChartDataSet {
    let dataset = LineChartDataSet(entries: enties, label: nil)
    dataset.colors = [.yellow]
    dataset.drawCirclesEnabled = false
    dataset.drawValuesEnabled = false
    return dataset
}
private func setData() {
    let data = CombinedChartData()
    data.candleData = getCData()
    data.lineData = getLData()
    chart.data = data
}

圖表優化

由圖1可以看出CombinedChartView 的x軸自動設定把 第一及最後的K線吃掉了,解決方法是自訂x的上下邊界

最小值

chart.xAxis.axisMinimum = -0.5

最大值

chart.xAxis.axisMaximum = Double(lineDatas.count) - 0.5

最大值會由資料的根數去決定

axisDependency介紹

有時會遇有兩種圖單位差距很大放在同一張表的需求(例如:股價與殖利率)

這時就需要讓兩張圖的依附值分別在不同邊

這邊直接把剛剛的線圖除以100來做案例

for i in 1...5 {
    let number = Double(i) * 10
//            let data = LineData(time: "\(i)月", price: number - 1)
    
    //axisDependency介紹
    let data = LineData(time: "\(i)月", price: (number - 1)/100)
    datas.append(data)
}

沒有處理的狀況下如圖2,導致沒辦法看出另一張圖的曲線

此時只要將兩種data set分別依附在左右不同邊即可以用較好的方式呈現這兩種數據

let dataset = LineChartDataSet(entries: enties, label: nil)
        dataset.axisDependency = .left
        
        -------
        
let dataset = CandleChartDataSet(entries: enties, label: nil)
        dataset.axisDependency = .right
https://github.com/cmmobile/WWChartsDemo
圖1
圖2