SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

iOS16の新機能に触れてみよう

iOS16で追加されたChartsフレームワークで日々の売上データをグラフ化してみる

iOS16の新機能に触れてみよう 第4回

  • X ポスト
  • このエントリーをはてなブックマークに追加

Chartsフレームワークの利用方法

 SwiftUIの仕様としてグラフを描画する機能がChartsフレームワークの名前で追加されました。Chartsフレームワークを使ってグラフを描画する基本的な方法について説明します。

棒グラフを表示する

 棒グラフは、BarMark構造体にx軸とy軸の値を指定することで表示できます。今回のサンプルでは、次のようにチャートを表示する部分をSampleChartの名前でメソッドとして分離して定義します。

[リスト2]ChartsSample/ContentView.swift抜粋
import SwiftUI
import Charts    // ----①

struct ContentView: View {
    var body: some View {
        NavigationStack{
            VStack {
                VStack(alignment: .leading, spacing: 8) {
                    SampleChart()   // チャートを表示
                }
                .padding()
                .background {   // 角丸にして影をつけて表示
                    RoundedRectangle(cornerRadius: 10, style: .continuous)
                        .fill( Color.white.shadow(.drop(radius: 2)))
                }
        }
        .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top. //  チャートを画面上寄りに表示
        .padding().navigationTitle("Charts Sample")
    }
    
    @ViewBuilder
    func SampleChart() -> some View {
        Chart {    // ----②
            ForEach(sampleData){ item in
                BarMark( // 棒グラフを表示
                    x: PlottableValue.value("date", item.date, unit: .day),    // ----③
                    y: PlottableValue.value("amount", item.amount)
                )
            }
        }.frame(height: 400)
    }
}
棒グラフの表示
棒グラフの表示

 チャートを表示するには、最初にChartsフレームワークをインポートし(①)、Chartブロックの中で棒グラフを表示するBarMark構造体を配置します(②)。Chartsフレームワークにはグラフを表示する構造体が次のように用意されています。

グラフを表示する構造体
構造体 グラフ
BarMark 棒グラフ
AreaMark 面グラフ
LineMark 折れ線グラフ
PointMark 散布図
RectangleMark 矩形でデータを表示
RuleMark 直線でデータを表示

 各構造体をChartブロックの中に配置することでグラフを表示できます。各構造体を配置するときの引数は、グラフのx軸とy軸の値をPlottableValue構造体で指定します(③)。PlottableValue構造体のvalueメソッドでラベルと値を指定します。値がDate型の場合のみ、unitの引数で日付時間の単位を指定できます。プログラムコード内では、PlottableValueの記述は省略可能です。

 サンプルではグラフを表示するViewをSampleChartの名前でメソッドとして定義しています。SampleChartメソッドには、Viewを生成する処理を行うので@ViewBuilderのアノテーションをつけています。

折れ線グラフを表示する

 本連載第1回で紹介した通り、BarMark構造体の代わりにLineMark構造体を利用することで、棒グラフを折れ線グラフに変更することができます。今回は、Pickerでのグラフの切り替え、AreaMark構造体を利用して折れ線グラフの下に色をつける例を紹介します。

[リスト4]StockChartSample/ContentView.swift抜粋
# 前略
struct ContentView: View {
    @State var sampleData: [DailyAmount] = examples
    @State var showLineGraph: Bool = false // -------- ① 折れ線グラフを表示するか?
    
     var body: some View {
        NavigationStack{
            VStack {
                VStack(alignment: .leading, spacing: 8) {
                    Toggle("Line Graph", isOn: $showLineGraph)  // -------- ② 折れ線グラフ切り替えのトグル
                        .padding(.top)
                    SampleChart()
    # 略
    func SampleChart() -> some View {
    # 略
        Chart {
            ForEach(sampleData){ item in
                if showLineGraph {. //  -------- ③ 折れ線グラフの表示
                    LineMark(
                        x: .value("date", item.date, unit: .day),
                        y: .value("amount", item.amount)
                    )
                    .foregroundStyle(Color.blue)
                    
                    AreaMark(
                        x: .value("date", item.date ,unit: .day),
                        y: .value("amount", item.amount)
                    )
                    .foregroundStyle(Color.blue).opacity(0.1)
                } else {
                    BarMark(
    # 略
折れ線グラフの表示
折れ線グラフの表示

 最初に折れ線グラフを表示するかどうかを意味するバインディング変数として、Bool型のshowLineGraphを定義します(①)。あとは、変数showLineGraphの値をトグルで切り替えられるようにします(②)。チャートを表示する際に、変数showLineGraphの値がtrueならば、LineMark構造体で折れ線、AreaMark構造体で(x, y)までの領域を塗りつぶします。

次のページ
Chartsフレームワークの実践的な使用例

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
iOS16の新機能に触れてみよう連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 片渕 彼富(カタフチ カノトミ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/17200 2023/02/08 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング