# Lesson3 CombinedChartView

範例：<https://github.com/cmmobile/WWChartsDemo>

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

使用CombinedChartView實作

```swift
@IBOutlet weak var chart: CombinedChartView!
```

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

```swift
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
}
```

```swift
private func setData() {
    let data = CombinedChartData()
    data.candleData = getCData()
    data.lineData = getLData()
    chart.data = data
}
```

![圖1](/files/-MBJ-Q9U9JvdVnVPid9j)

### 圖表優化

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

最小值

```swift
chart.xAxis.axisMinimum = -0.5
```

最大值

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

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

![](/files/-MBWeWSadLd5hg0fh0F2)

### axisDependency介紹

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

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

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

```swift
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](/files/-MBWgra31dPqNsaNF9oi)

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

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

```swift
let dataset = LineChartDataSet(entries: enties, label: nil)
        dataset.axisDependency = .left
        
        -------
        
let dataset = CandleChartDataSet(entries: enties, label: nil)
        dataset.axisDependency = .right
```

![](/files/-MBWhvvY5bDy43DlylCH)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://cmmobile.gitbook.io/cmiosbook/charts/lesson3-combinedchartview.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
