LoginSignup
0
0

chartsでプロットを識別

Posted at

chartsでプロットを識別

import UIKit
import Charts

class ViewController: UIViewController , ChartViewDelegate{


    @IBOutlet weak var lineChartView: LineChartView!
    
    // モック用データ
    let rawDataGraph: [Int] = [20,24,21,25,26,30,31,20]

    override func viewDidLoad() {
        super.viewDidLoad()
        

        // Chart dataSet準備
        let entries = rawDataGraph.enumerated().map { ChartDataEntry(x: Double($0.offset), y: Double($0.element)) }
        let dataSet = LineChartDataSet(entries: entries)
        // 線の太さ
        dataSet.lineWidth = 5
        // 各プロットのラベル表示
        dataSet.drawValuesEnabled = true
        // 各プロットの丸表示
        dataSet.drawCirclesEnabled = true
        // 各プロットの丸の大きさ
        dataSet.circleRadius = 4
        // 各プロットの丸の色
        dataSet.circleColors = [UIColor.lightGray]

        // 作成したデータセットをLineChartViewに追加
        lineChartView.data = LineChartData(dataSet: dataSet)

        // X軸のラベルの位置を下に設定
        lineChartView.xAxis.labelPosition = .bottom
        // X軸のラベルの色を設定
        lineChartView.xAxis.labelTextColor = .systemGray
        // X軸の線、グリッドを非表示にする
        lineChartView.xAxis.drawGridLinesEnabled = false
        lineChartView.xAxis.drawAxisLineEnabled = false

        // 右側のY座標軸は非表示にする
        lineChartView.rightAxis.enabled = false

        // Y座標の値が0始まりになるように設定
        lineChartView.leftAxis.axisMinimum = 0.0
        lineChartView.leftAxis.axisMaximum = 40.0
        lineChartView.leftAxis.drawZeroLineEnabled = true
        lineChartView.leftAxis.zeroLineColor = .systemGray

        // グラフに境界線(横)を追加
        let limitLine = ChartLimitLine(limit: 00, label: "AAAAA")
        limitLine.lineColor = .darkGray
        limitLine.valueTextColor = .darkGray
        lineChartView.leftAxis.addLimitLine(limitLine)

        // グラフに境界線(縦)を追加
        let limitLineX = ChartLimitLine(limit: 0, label: "BBBBB")
        limitLineX.lineColor = .darkGray
        limitLineX.valueTextColor = .darkGray
        lineChartView.xAxis.addLimitLine(limitLineX)

        // ラベルの数を設定
        lineChartView.leftAxis.labelCount = 5
        // ラベルの色を設定
        lineChartView.leftAxis.labelTextColor = .systemGray
        // グリッドの色を設定
        lineChartView.leftAxis.gridColor = .systemGray
        // 軸線は非表示にする
        lineChartView.leftAxis.drawAxisLineEnabled = false

        // 凡例を非表示
        lineChartView.legend.enabled = false

        // タップでプロットを選択できないようにする
        lineChartView.highlightPerTapEnabled = true
        // ピンチズームオフ
        lineChartView.pinchZoomEnabled = true
        // ダブルタップズームオフ
        lineChartView.doubleTapToZoomEnabled = true

        // アニメーションをつける
        lineChartView.animate(xAxisDuration: 1.0, yAxisDuration: 1.3, easingOption: .easeInCubic)
        
        lineChartView.delegate = self

    }
    func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) {
        let xValue = entry.x
        let yValue = entry.y
        
        // 特定のX座標とY座標を使ってプロットを識別
        if xValue == 2.0  {
            print("特定のプロットがタップされました")
            // ここで特定のプロットをタップしたときの処理を記述
        }
    }
    
}

Y軸時系列データ

import UIKit
import Charts

class ViewController: UIViewController {

    @IBOutlet weak var lineChartView: LineChartView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // JSONデータの例: { "time": ["10:00", "11:00", "12:00"], "temperature": [25.5, 26.0, 27.3] }
        let json = """
        {
            "time": ["10:00", "11:00", "12:00"],
            "temperature": [25.5, 26.0, 27.3]
        }
        """
        
        // JSONデータをデコードして構造体にマッピング
        struct ChartData: Decodable {
            let time: [String]
            let temperature: [Double]
        }
        
        do {
            let jsonData = json.data(using: .utf8)!
            let chartData = try JSONDecoder().decode(ChartData.self, from: jsonData)
            
            var dataEntries: [ChartDataEntry] = []
            for i in 0..<chartData.time.count {
                // 時間データをFloatの時刻(時と分)に変換
                let timeComponents = chartData.time[i].split(separator: ":")
                let hour = Double(timeComponents[0]) ?? 0.0
                let minute = Double(timeComponents[1]) ?? 0.0
                let timeInFloat = hour + (minute / 60.0)
                
                let dataEntry = ChartDataEntry(x: timeInFloat, y: chartData.temperature[i])
                dataEntries.append(dataEntry)
            }
            
            let dataSet = LineChartDataSet(entries: dataEntries, label: "Temperature")
            let data = LineChartData(dataSet: dataSet)
            
            lineChartView.data = data
        } catch {
            print("Error decoding JSON: \(error)")
        }
    }
}


import UIKit
import Charts

class ViewController: UIViewController {

    @IBOutlet weak var lineChartView: LineChartView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // JSONデータの例: { "time": ["10:00", "11:00", "12:00"], "temperature": [25.5, 26.0, 27.3] }
        let json = """
        {
            "time": ["10:00", "11:00", "12:00"],
            "temperature": [25.5, 26.0, 27.3]
        }
        """
        
        // JSONデータをデコードして構造体にマッピング
        struct ChartData: Decodable {
            let time: [String]
            let temperature: [Double]
        }
        
        do {
            // JSONデータをバイトデータに変換
            let jsonData = json.data(using: .utf8)!
            
            // JSONデータを構造体にデコード
            let chartData = try JSONDecoder().decode(ChartData.self, from: jsonData)
            
            // チャートに追加するデータエントリの配列
            var dataEntries: [ChartDataEntry] = []
            
            // ループでJSONデータを取得してデータエントリを作成
            for i in 0..<chartData.time.count {
                // 時間データをFloatの時刻(時と分)に変換
                let timeComponents = chartData.time[i].split(separator: ":")
                let hour = Double(timeComponents[0]) ?? 0.0
                let minute = Double(timeComponents[1]) ?? 0.0
                let timeInFloat = hour + (minute / 60.0)
                
                // データエントリを作成して配列に追加
                let dataEntry = ChartDataEntry(x: timeInFloat, y: chartData.temperature[i])
                dataEntries.append(dataEntry)
            }
            
            // チャートのデータセットとラベルを作成
            let dataSet = LineChartDataSet(entries: dataEntries, label: "Temperature")
            let data = LineChartData(dataSet: dataSet)
            
            // チャートにデータをセット
            lineChartView.data = data
        } catch {
            print("Error decoding JSON: \(error)")
        }
    }
}

2つのデータ

class ViewController: UIViewController {

    @IBOutlet weak var chartView1: LineChartView!
    @IBOutlet weak var chartView2: LineChartView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // データの用意
        let dataEntries1: [ChartDataEntry] = [
            ChartDataEntry(x: 1.0, y: 10.0),
            ChartDataEntry(x: 2.0, y: 20.0),
            ChartDataEntry(x: 3.0, y: 15.0),
        ]
        
        let dataEntries2: [ChartDataEntry] = [
            ChartDataEntry(x: 1.0, y: 5.0),
            ChartDataEntry(x: 2.0, y: 25.0),
            ChartDataEntry(x: 3.0, y: 12.0),
        ]
        
        // データセットの作成
        let dataSet1 = LineChartDataSet(entries: dataEntries1, label: "Dataset 1")
        let dataSet2 = LineChartDataSet(entries: dataEntries2, label: "Dataset 2")
        
        // グラフにデータセットを設定
        chartView1.data = LineChartData(dataSet: dataSet1)
        chartView2.data = LineChartData(dataSet: dataSet2)
    }
}

class ViewController: UIViewController {

@IBOutlet weak var chartView1: LineChartView!
@IBOutlet weak var chartView2: LineChartView!

override func viewDidLoad() {
    super.viewDidLoad()
    
    // データの用意
    let dataEntries1: [ChartDataEntry] = [
        ChartDataEntry(x: 1.0, y: 10.0),
        ChartDataEntry(x: 2.0, y: 20.0),
        ChartDataEntry(x: 3.0, y: 15.0),
    ]
    
    let dataEntries2: [ChartDataEntry] = [
        ChartDataEntry(x: 1.0, y: 5.0),
        ChartDataEntry(x: 2.0, y: 25.0),
        ChartDataEntry(x: 3.0, y: 12.0),
    ]
    
    // データセットの作成
    let dataSet1 = LineChartDataSet(entries: dataEntries1, label: "Dataset 1")
    let dataSet2 = LineChartDataSet(entries: dataEntries2, label: "Dataset 2")
    
    // グラフにデータセットを設定
    chartView1.data = LineChartData(dataSet: dataSet1)
    chartView2.data = LineChartData(dataSet: dataSet2)
}

}

@IBOutlet プロパティ:
chartView1 と chartView2 は、Storyboard上に配置された LineChartView と接続されたプロパティです。これにより、コード内でこれらのグラフビューを制御できます。

viewDidLoad メソッド:
画面が読み込まれる際に実行されるメソッドです。ここで、データの用意やグラフの設定を行います。

データの用意:
dataEntries1 と dataEntries2 には、各データポイントの x 座標と y 座標を指定しています。例えば、(x: 1.0, y: 10.0) は x 座標が 1.0 で y 座標が 10.0 というデータポイントを示しています。

データセットの作成:
LineChartDataSet は、データポイントの集まりであるデータセットを作成します。entries パラメータには、先ほど用意したデータポイントの配列を指定します。label パラメータは、グラフの凡例(ラベル)に表示されるテキストを指定します。

グラフにデータセットを設定:
LineChartData クラスにデータセットを渡して、グラフのデータを設定します。chartView1.data と chartView2.data にそれぞれのデータを設定しています。

これにより、2つの折れ線グラフが画面上に表示され、それぞれのグラフにデータが表示されるようになります。必要に応じて、色や線のスタイル、軸ラベルなどをカスタマイズすることもできます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0