返回顶部
首页 > 资讯 > 移动开发 >iOS16使用SwiftUICharts创建折线图实现实例
  • 303
分享到

iOS16使用SwiftUICharts创建折线图实现实例

iOS16SwiftUICharts折线图SwiftUICharts 2022-11-13 19:11:34 303人浏览 薄情痞子
摘要

目录前言简单折线图其他图表让折线图增加可访问性为折线图添加多个数据序列显示步数系列结论前言 苹果在 WWDC 2022 上推出了 SwiftUI 图表,这使得在 SwiftUI 视图

前言

苹果在 WWDC 2022 上推出了 SwiftUI 图表,这使得在 SwiftUI 视图中创建图表变得异常简单。图表是以丰富的格式呈现可视化数据的一种很好的方式,而且易于理解。本文展示了如何用比以前从头开始创建同样的折线图少得多的代码轻松创建折线图。此外,自定义图表的外观和感觉以及使图表中的信息易于访问也是非常容易的。

如以前的文章所示,不使用 SwiftUI Charts 也可以创建一个折线图。然而,使用 Charts 框架可以提供大量的图表来探索对应用程序中的数据最有效的方法,从而使它变得更加容易。

简单折线图

从包含一周的步数的数据开始,类似于 在SwiftUI中创建折线图 中使用的数据。定义一个结构来保存日期和该日的步数,并为当前周创建一个数组

struct StepCount: Identifiable {
    let id = UUID()
    let weekday: Date
    let steps: Int
    init(day: String, steps: Int) {
        let fORMatter = DateFormatter()
        formatter.dateFormat = "yyyyMMdd"
        self.weekday = formatter.date(from: day) ?? Date.distantPast
        self.steps = steps
    }
}
let currentWeek: [StepCount] = [
    StepCount(day: "20220717", steps: 4200),
    StepCount(day: "20220718", steps: 15000),
    StepCount(day: "20220719", steps: 2800),
    StepCount(day: "20220720", steps: 10800),
    StepCount(day: "20220721", steps: 5300),
    StepCount(day: "20220722", steps: 10400),
    StepCount(day: "20220723", steps: 4000)
]

要创建一个折线图,为步数数据中的每个元素创建一个带有LineMark的图表。在LineMark的 X 值中指定工作日,在 Y 值中指定步数。注意,还需要导入Charts框架。

这就为步数数据创建了一个线形图。由于只有一个系列的数据,ForEach 可以省略,数据可以直接传递给 Chart 初始化器。两个部分都产生相同的折线图。

import SwiftUI
import Charts
struct LineChart1: View {
    var body: some View {
        VStack {
            GroupBox ( "Line Chart - Step Count") {
                Chart {
                    ForEach(currentWeek) {
                        LineMark(
                            x: .value("Week Day", $0.weekday, unit: .day),
                            y: .value("Step Count", $0.steps)
                        )
                    }
                }
            }
            GroupBox ( "Line Chart - Step Count") {
                Chart(currentWeek) {
                    LineMark(
                        x: .value("Week Day", $0.weekday, unit: .day),
                        y: .value("Step Count", $0.steps)
                    )
                }
            }
        }
    }
}

使用 SwiftUI Charts 创建的折线图显示每日步数

其他图表

SwiftUI Charts 有许多可用的图表选项。这些可以通过将图表标记从LineMark改为其他类型的标记(如BarMark)来生成条形图。

struct OtherCharts: View {
    var body: some View {
        VStack {
            GroupBox ( "Line Chart - Step count") {
                Chart(currentWeek) {
                    LineMark(
                        x: .value("Week Day", $0.weekday, unit: .day),
                        y: .value("Step Count", $0.steps)
                    )
                }
            }
            GroupBox ( "Bar Chart - Step count") {
                Chart(currentWeek) {
                    BarMark(
                        x: .value("Week Day", $0.weekday, unit: .day),
                        y: .value("Step Count", $0.steps)
                    )
                }
            }
            GroupBox ( "Point Chart - Step count") {
                Chart(currentWeek) {
                    PointMark(
                        x: .value("Week Day", $0.weekday, unit: .day),
                        y: .value("Step Count", $0.steps)
                    )
                }
            }
            GroupBox ( "Rectangle Chart - Step count") {
                Chart(currentWeek) {
                    RectangleMark(
                        x: .value("Week Day", $0.weekday, unit: .day),
                        y: .value("Step Count", $0.steps)
                    )
                }
            }
            GroupBox ( "Area Chart - Step count") {
                Chart(currentWeek) {
                    AreaMark(
                        x: .value("Week Day", $0.weekday, unit: .day),
                        y: .value("Step Count", $0.steps)
                    )
                }
            }
        }
    }
}

使用 SwiftUI 图表创建的其他图表类型,显示每日步数

让折线图增加可访问性

将图表植入 SwiftUI 的一个好处是,可以很容易地使用 可访问性修饰符 使图表变得可访问。为 StepCount 添加一个计算属性,将数据返回为一个字符串,可由 accessibilityLabel 使用。然后为图表中的每个标记添加可访问性标签和值。

struct StepCount: Identifiable {
    let id = UUID()
    let weekday: Date
    let steps: Int
    init(day: String, steps: Int) {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyyMMdd"
        self.weekday = formatter.date(from: day) ?? Date.distantPast
        self.steps = steps
    }
    var weekdayString: String {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyyMMdd"
        dateFormatter.dateStyle = .long
        dateFormatter.timeStyle = .none
        dateFormatter.locale = Locale(identifier: "en_US")
        return  dateFormatter.string(from: weekday)
    }
}
    GroupBox ( "Line Chart - Daily Step Count") {
        Chart(currentWeek) {
            LineMark(
                x: .value("Week Day", $0.weekday, unit: .day),
                y: .value("Step Count", $0.steps)
            )
            .accessibilityLabel($0.weekdayString)
            .accessibilityValue("\($0.steps) Steps")
        }
    }

在 SwiftUI 图表中使折线图可访问性

为折线图添加多个数据序列

折线图是比较两个不同系列数据的好方法。创建第二个系列,即前一周的步数,并将这两个系列添加到折线图中。

let previousWeek: [StepCount] = [
    StepCount(day: "20220710", steps: 15800),
    StepCount(day: "20220711", steps: 7300),
    StepCount(day: "20220712", steps: 8200),
    StepCount(day: "20220713", steps: 25600),
    StepCount(day: "20220714", steps: 16100),
    StepCount(day: "20220715", steps: 16500),
    StepCount(day: "20220716", steps: 3200)
]
let currentWeek: [StepCount] = [
    StepCount(day: "20220717", steps: 4200),
    StepCount(day: "20220718", steps: 15000),
    StepCount(day: "20220719", steps: 2800),
    StepCount(day: "20220720", steps: 10800),
    StepCount(day: "20220721", steps: 5300),
    StepCount(day: "20220722", steps: 10400),
    StepCount(day: "20220723", steps: 4000)
]
let stepData = [
    (period: "Current Week", data: currentWeek),
    (period: "Previous Week", data: previousWeek)
]

第一次尝试添加这两个系列的数据没有按预期显示。

struct LineChart2: View {
    var body: some View {
        GroupBox ( "Line Chart - Daily Step Count") {
            Chart {
                ForEach(stepData, id: \.period) {
                    ForEach($0.data) {
                        LineMark(
                            x: .value("Week Day", $0.weekday, unit: .day),
                            y: .value("Step Count", $0.steps)
                        )
                        .accessibilityLabel($0.weekdayString)
                        .accessibilityValue("\($0.steps) Steps")
                    }
                }
            }
        }
    }
}

第一次尝试在 SwiftUI Charts 中创建一个包含两个系列步数数据的折线图

显示步数系列

在折线图中显示多个基于工作日的步数系列

最初尝试在折线图中显示多组数据的问题是X轴使用了日期。当前的周数紧接着上一周,所以每一个点都是沿着X轴线性递增绘制的。

有必要只用工作日作为X轴的数值,这样所有的周日都在同一个X坐标上绘制。

StepCount中添加另一个计算属性,以便以字符串格式返回工作日的短日。

struct StepCount: Identifiable {
    . . .
    var shortDay: String {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "EEE"
        return  dateFormatter.string(from: weekday)
    }
}

shortDay 用于图表中 LineMarks 的 x 值。另外,前景的样式设置为基于stepCount数组的周期。折线图使用 x 轴的工作日来显示两周的步数,以便在周之间进行比较。

struct LineChart3: View {
    var body: some View {
        VStack {
            GroupBox ( "Line Chart - Daily Step Count") {
                Chart {
                    ForEach(stepData, id: \.period) { steps in
                        ForEach(steps.data) {
                            LineMark(
                                x: .value("Week Day", $0.shortDay),
                                y: .value("Step Count", $0.steps)
                            )
                            .foregroundStyle(by: .value("Week", steps.period))
                            .accessibilityLabel($0.weekdayString)
                            .accessibilityValue("\($0.steps) Steps")
                        }
                    }
                }
                .frame(height:400)
            }
            .padding()
            Spacer()
        }
    }
}

SwiftUI 图表中带有两个系列的步数数据的折线图

结论

在 SwiftUI Charts 中还有很多东西可以探索。使用这个框架显然比从头开始建立你自己的图表要好。

以上就是iOS16使用SwiftUI Charts创建折线图实现实例的详细内容,更多关于iOS16 SwiftUI Charts折线图的资料请关注编程网其它相关文章!

--结束END--

本文标题: iOS16使用SwiftUICharts创建折线图实现实例

本文链接: https://lsjlt.com/news/171039.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • iOS16使用SwiftUICharts创建折线图实现实例
    目录前言简单折线图其他图表让折线图增加可访问性为折线图添加多个数据序列显示步数系列结论前言 苹果在 WWDC 2022 上推出了 SwiftUI 图表,这使得在 SwiftUI 视图...
    99+
    2022-11-13
    iOS16 SwiftUI Charts折线图 SwiftUI Charts
  • vue使用echarts实现折线图
    本文实例为大家分享了vue使用echarts实现折线图的具体代码,供大家参考,具体内容如下 效果图: 代码: <template>             <di...
    99+
    2024-04-02
  • 如何使用JFreeChart实现折线图
    小编给大家分享一下如何使用JFreeChart实现折线图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!折线图,大可分为两种,(1)X轴值类型为String的。2)...
    99+
    2023-06-17
  • vue使用ECharts实现折线图和饼图
    在开发后台管理项目时,需要统计后台用户数据,以折线图和饼图的形式显示,这边采用apache-echarts来实现需求。 1.安装echarts和引入 npm install ec...
    99+
    2024-04-02
  • 使用python matplotlib画折线图实例代码
    目录matplotlib简介1、画折线图【一条示例】2、画折线图带数据标签3、画多条折线图:4、画多条折线图分别带数据标签:总结matplotlib简介 matplotlib 是py...
    99+
    2024-04-02
  • vue怎么使用echarts实现折线图
    这篇文章主要讲解了“vue怎么使用echarts实现折线图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue怎么使用echarts实现折线图”吧!效果图:代码:<template&g...
    99+
    2023-06-29
  • Android画图实现MPAndroidchart折线图示例详解
    目录效果图依赖activity.xmlMainActivityMyMarkerView 自定义classmaekertextview .xml常用属性效果图 用的是3.1.0的依赖...
    99+
    2024-04-02
  • Android实现双曲线折线图
    本文实例为大家分享了Android实现双曲线折线图的具体代码,供大家参考,具体内容如下 先看一下效果图 1.先下载jar包 mpandroidchartlibrary-2-1-6....
    99+
    2024-04-02
  • 怎么用Python matplotlib实现折线图
    这篇文章主要介绍“怎么用Python matplotlib实现折线图”,在日常操作中,相信很多人在怎么用Python matplotlib实现折线图问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-06-29
  • vue+echarts实现多条折线图
    本文实例为大家分享了vue+echarts实现多条折线图的具体代码,供大家参考,具体内容如下 数据未使用json格式,直接写在页面 大致效果 页面代码: <template&...
    99+
    2024-04-02
  • Vue+Echarts实现简单折线图
    本文实例为大家分享了Vue+Echarts实现简单折线图的具体代码,供大家参考,具体内容如下 Vue+Echarts实现一个折线图,打开vue的项目: 1、在项目里面安装echart...
    99+
    2024-04-02
  • Vue+Echarts实现柱状折线图
    本文实例为大家分享了Vue+Echarts实现柱状折线图的具体代码,供大家参考,具体内容如下 vue处理json数据渲染柱状折线图 HTML: <div id="lineCha...
    99+
    2024-04-02
  • vue+echart实现圆滑折线图
    本文实例为大家分享了vue+echart实现圆滑折线图的具体代码,供大家参考,具体内容如下 效果图: 安装依赖: npm install echarts --save     im...
    99+
    2024-04-02
  • PythonpyechartsLine折线图的具体实现
    目录一、绘制折线图二、添加最小值最大值平均值三、竖线提示信息四、显示工具栏五、实心面积填充六、是否跳过空值七、折线光滑化八、多X轴九、阶梯图一、绘制折线图 import seabor...
    99+
    2024-04-02
  • Qt实现简单折线图表
    本文实例为大家分享了Qt实现简单折线图表的具体代码,供大家参考,具体内容如下 main.cpp #include <QApplication> #include <...
    99+
    2024-04-02
  • vue+antv怎么实现折线图
    本文小编为大家详细介绍“vue+antv怎么实现折线图”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue+antv怎么实现折线图”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。vue阿里的G2图表-antv+折...
    99+
    2023-06-30
  • QtQChart实现折线图的绘制
    目录前言1.使用2.效果如下3.具体实现如下4.刷新QChart5.PCL 点排序前言 QChart  是常用的图表;我这里做了一个 default 和 custom 1....
    99+
    2023-05-17
    Qt QChart绘制折线图 Qt QChart折线图 Qt QChart
  • Vue导入Echarts实现折线图
    目录前言折线图特点折线图实现步骤折线图常见效果标记线条控制填充风格紧挨边缘缩放-脱离0值比例堆叠图前言 本篇来学习下折线图的实现 折线图特点 折线图更多的使用来呈现数据随时间的变化趋...
    99+
    2022-12-15
    Vue Echarts实现折线图 Vue折线图 Vue Echarts
  • Android实现折线图小工具
    本文实例为大家分享了Android实现折线图小工具的具体代码,供大家参考,具体内容如下 1.LineChart类 public class LineChart extends Vie...
    99+
    2024-04-02
  • 利用Python程序读取Excel创建折线图
    目录一、打开命令提示符二、通过pip命令安装所需要的工具库三、打开IDLE开始编程附录1、常用的工具库安装2、pip常用命令3、常用的工具库4、常用的marker5、常用的颜色一、打...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作