【SwiftUI】Charts_iOSを使ったグラフの実装方法【CoreDataと連携】

この記事では、SwiftUIでのCharts_iOSを使ったグラフの実装方法を紹介します。

実装例としてCoreDataを利用し、Y軸に温度、X軸に日付を線グラフで表示する方法を解説します。

 

◆動作検証環境

・ローカル環境:mac Catalina
・XCode:12.3
・SwiftUI:2.0
・iOS:14.0
・Life Cycle:SwiftUI App
・Charts:4.0.1
スポンサードリンク

Chartsのインストール

 

Chartsのインストールの方法や、実装できるグラフの使用例等はこちらのサイトで確認できます。

Charts

 

今回は、CocoaPodsを利用してChartsのインストールを行います。

CocoaPodsのインストール

まずは下記のコマンドを実行してCocoaPodsをインストールします。

※すでにインストール済みの場合は、こちらの設定は必要ありません。

 

 

インストールが終わったら、次のコマンドで初期化を行います。

 

XcodeプロジェクトへCocoaPodsを導入する

 

導入の作業の前に、Xcodeのプロジェクトが開かれているか確認します。開いている場合はプロジェクトを閉じます。

 

プロジェクトディレクトリへの移動

 

CocoaPodsファイルの作成

 

 

Podfileの編集(Chartsの導入)

さきほどのpod init を行ったディレクトリにPodfile が作成されるので、内容を下記のように編集します。

 

編集後に下記コマンドでKeyboardObserving のインストールを行います。

 

インストール後の更新作業は下記コマンドで行います。

 

 

対象のモジュールのインストール後からは、ProjectName.xcworkspace で作業、編集を行います(ProjectName.xcodeproj ではない。)

 

スポンサードリンク

Charts_iOSを使ってデータの無いグラフの表示

 

プロジェクトにCharts の導入ができましたので、まずはデータの無い状態でグラフ機能の表示を行います。

LineChart.swiftファイルを作成し、下記のように編集します。

 

この状態でこのstruct を表示すると、

と表示されます。

 

データを追加してCharts_iOSの線グラフを表示する

 

データを利用する線グラフの表示

 

まずは、グラフで表示するデータを作成します。

今回は、表示の確認のために以下の簡単なデータとします。

X軸Y軸
10.0
20.0
30.0
40.0
50.0

 

LineChartのStruct内に定義します。

 

次に、LineChartView に表示するデータをLineChartData 型で渡すメソッドを作ります。

 

そして、makeUIView メソッド内で、lineChartView にデータを追加します。

 

これでLineChartのコード全文は以下のようになります。

 

この状態で、サイズを指定し表示すると以下のようなグラフを確認できるはずです。

 

スポンサードリンク

グラフ表示のカスタマイズ

いくつか表示の方法をカスタマイズします。

makeUIViewsetData を以下のように編集し、グラフ表示をカスタマイズします。

 

 

 

この状態でグラフを表示すると、以下のようになります。

 

他にも、カスタマイズの方法がありますが、ここでは代表的な方法のみ紹介しています。

 

Date型の値をY軸の表示に対応させる

 

現在はグラフに表示させる値は、ChartDataEntry クラスのインスタンスを利用していますが、利用できるパラメータは、X軸、Y軸ともにDouble 型となります。

 

この仕様に対応し、X軸に日付のデータを表示できるように、コードを編集します。

 

getDataPointsメソッドの追加

X軸Y軸
10.0
20.0
30.0
40.0
50.0

現在利用しているデータは上記の内容です。

Y軸は上記のまま利用し、X軸の値を日付での表示に対応させます。

そのために、X軸、Y軸を1セットとし、このセットの数をX軸に値になるようにgetDataPoints メソッドを以下のように作成します。

これで、X軸の値は引数で受け取る[ChartDataEntry] 型配列の要素数、Y軸はChartDataEntry の値とする[ChartDataEntry] を返すようになります。

 

このメソッド作成に伴い、setData メソッドでdataPoint を定義する際にさきほどのメソッドを利用するように編集します。

 

この状態でグラフを表示すると、X軸が配列の要素数(この記事のデータの場合は0〜4に5個)になり、以下のようになります。

 

次に、makeUIView メソッド内を編集します。

xAxis.granularity = 1.0 とする事で、X軸の要素数の単位が1となり、日付の表示に対応できるようになります。
この状態でグラフを表示すると以下のようになります。

 

 

DateValueFormatterクラスの作成

グラフの素データの要素数を日付に変換するために、IAxisValueFormatter クラスを継承するクラスを作成し、以下のように編集します。

 

パラメータで受け取るDate型の日付を最初の日として、データの要素分表示するようになります。

dateFormatter.dateFormat = "M/d" と指定する事でグラフで日付が表示される際は1/1 となります。

 

あとは、makeUIView のメソッド内でxAxis にさきほどのクラスでフォーマットします。

インスタンスを作る時に、最初に表示する日付けをDate型で指定します。

 

この状態でグラフを表示すると、以下のようになりX軸を日付で表示する事ができます。

スポンサードリンク

CoreDataの値をCharts_iOSの線グラフで表示する

 

最後に、CoreDataの値を利用してCharts_iOSの線グラフで表示するできるように編集します。

今回はCoreDataの値は、日付と温度と2種類としました。

CoreDataを使ったデータベース処理の方法は過去の記事を参考にしてください。

関連記事

この記事では、SwiftUIでのCoreData の基本的な実装方法【CRUD(作成、更新、削除)】を紹介しています。簡単なタスク管理App(タスク内容とスケジュールの登録)を作成しながら解説します。 ◆動[…]

【SwiftUI】CoreData の基本的な実装方法【CRUD(作成、更新、削除)】

 

この記事で紹介するCoreDataの処理を含めたファイルとコードは以下のとおりです。

 

ChatsTestApp.swift

 

ContentView.swift

 

ViewModel.swift

 

Sheet.swift

 

Persistence.swift

 

4日分の温度のデータをCareDataに追加し、ContentViewで以下のよう表示されます。

今回は、このデータを先程作成したグラフで表示するように編集を行います。

 

getDataPointsの編集

温度の値の配列のデータでグラフ表示に対応できるように、getDataPointsを編集します。

 

LineChartの編集

LineChartメソッドを以下のように編集し、CoreDataの温度の値を利用し、Double型の配列を作ります。

 

setDataの編集

setDataも対応させます。

 

makeUIViewの編集

setDataのグラフの始まりの日付の指定も、CoreDataのデータを利用するように編集します。

 

この状態でグラフを表示すると、下記のようにCoreDataの内容にあった表示となります。

 

スポンサードリンク

日付が連続しない場合の対応

現在のコードの場合、最初の日付からその後全ての日付でデータがある場合であれば、素のデータどおりに表示されますが、温度のデータが無い日もある場合、要素数を素に日付を表示するので素のデータとは違う表示となってしまいます。

 

現在のCoreData内のデータは3月1日から4日まで、連続でありますが、これを7日まで(データの無い日は0で表示)グラフで表示するようにします。

 

この表示の方法を修正するようにコードを編集します。

 

上記の編集されているコード内で利用されているDate型やCalendarクラスを利用する日付の計算、比較の方法の詳細はこちらの記事を参考にしてください

関連記事

この記事では、SwiftUIでのDate型やCalendarクラスを利用する日付の計算、比較の方法を紹介しています。 日付、時刻の比較 例としてDate() で取得できる日付(実行時に今日の現時刻[…]

【SwiftUI】Date型やCalendarクラスを利用する日付の計算、比較の方法

 

この状態でグラフを表示すると以下のようになります。

 

グラフの線が0を下回る場所でも表示されているので、setDataの表示モードを変更します。

 

この変更で表示が以下のようになります。

 


 

以上、SwiftUIでのCharts_iOSを使ったグラフの実装例としてCoreDataを利用し、Y軸に温度、X軸に日付を線グラフで表示する方法を解説しました。