在这里插入图片描述

概述

在 iOS 开发这个波谲云诡的江湖中,SwiftUI 可谓是一位后起之秀,以其简洁明快的招式迅速在 UI 框架领域中崭露头角。

在这里插入图片描述

而其中的 Charts 框架,更是如同江湖中的 “数据可视化宝典”那样,让各位秃头少侠们能够轻松将复杂的数据转化为直观易懂的图表。

在本篇武学秘籍中,您将学到如下内容:

    • 概述
    • 1. 江湖起源——原有 Charts 框架的武学修炼
    • 2. 江湖变革——SwiftUI Charts 3D 图表来袭
    • 3. 轻功飞行——SurfacePlot 打造梦幻曲面图
    • 4. 握剑诀——交互与视角
    • 5. 3D 图表修炼的注意事项
      • 5.1 避免数据过载
      • 5.2 谨慎选择图表类型
      • 5.3 性能优化不容忽视
    • 6. 尾声:3D 图表开启数据可视化新纪元

那还等什么呢?各位初入江湖的豪客和“大虾”们,请随老夫一起进入图表的美妙世界吧!Let’s go!!!😉


1. 江湖起源——原有 Charts 框架的武学修炼

何曾几时,WWDC 2020(SwiftUI 4.0,iOS 16)江湖风起云涌,数不清的英雄豪杰和兵器纷繁复杂,数据可视化在其中占据了举足轻重的地位。

而正是在这样的背景下,SwiftUI 的 Charts 框架横空出世,犹如一位初出茅庐的少年剑客,虽然招式简单,却也灵活迅捷,迅速得到了武林各大门派的认可。

在这里插入图片描述

初入江湖的菜鸟侠客们可以通过它迅速绘制出柱状图、折线图和饼状图等基础武学,简单易懂,入门容易。记得那年,当 18 岁的列位秃头少侠们在代码中添加 Chart 时,心中便涌起一股非凡的成就感,仿佛宝子们也成为了数据江湖中的一员。

如下便是一个简单的柱状图的代码示例,犹如初入武林的少年,凭借一把利剑便能出奇制胜:

import SwiftUI
import Chartsstruct SimpleBarChart: View {let data: [Double] = [2, 3, 5, 7, 11, 13]var body: some View {Chart(data) { value inBarMark(x: .value("Value", value))}.chartXAxis {AxisMarks()}}
}

这就是“基本剑法”,以简洁利落见长,正如初出茅庐的剑客,刚刚踏入这个江湖那样的飘逸洒脱:

在这里插入图片描述

随着修炼的深入,少侠们会逐渐意识到,这种图表只能为大家在江湖中打下些许基础,但它也暴露出了一些不足。

在这里插入图片描述

虽然二十步之内,便可知敌人风吹草动,然而一旦对手修炼到更高的境界,单靠这种平凡的武学便显得不足以应对复杂的数据纷争。

2. 江湖变革——SwiftUI Charts 3D 图表来袭

谁能想象,江湖中的一场风云变幻,竟会让 Charts 框架焕发新生。

在WWDC 25 上,苹果总舵主为这门熟悉的武功奥义又注入了新的活力,推出了 Chart3D。这不再是寻常的剑法,而是进入了三维的殿堂。就像一位绝世大侠,早已超越了平面世界的束缚,开始在三维空间中闪展腾挪。

在这里插入图片描述

这时的 Chart3D,犹如一位有了深厚内力的高手,能在三维空间中挥洒自如。宝子们不再仅仅是直线和曲线的过客,而是能在空间中将数据点、曲面、视角交织成一幅立体图景。

无论是点的组合,还是面的铺展,或是交互的旋转,每一处都透露着数据与现实世界的紧密联系。

快看这段代码,仿佛是大侠抬手之间,便可将复杂的数据织入眼前的三维世界那样畅快淋漓:

struct ContentView: View {let data = [(2,5), (3,7), (5,11), (7,8), (11,20), (13,10)]var body: some View {NavigationStack {Chart3D(data.indices, id: \.self) { index inlet item = data[index]PointMark(x: .value("X", item.0),y: .value("Y", item.1),z: .value("Z", index)).foregroundStyle(.red.gradient)}.chartXAxisLabel("X轴").chartYAxisLabel("Y轴").chartZAxisLabel("Z轴").navigationTitle("Charts 心法展示")}}
}

此时,数据不仅停留在纸面上,而是跃然于三维空间之中,犹如剑客挥舞长剑,刺破苍穹:

在这里插入图片描述

现在,列为微秃小少侠们可以随心所欲地操控每一个数据点的位置,仿佛掌握了整个空间的节奏,就问你们赞不赞呢?

3. 轻功飞行——SurfacePlot 打造梦幻曲面图

在武林中,总有一些高手以轻盈如风的身法著称,他们步伐矫健,时隐时现。而 SurfacePlot 就如同这般,能够以平滑的曲面将两个变量之间的关系展现得淋漓尽致。

在这里插入图片描述

它能让小伙伴们不再拘泥于线条和点,而是化繁为简,把复杂的数据关系化作一张优美的曲面,轻盈地在三维空间中随意漂浮。

如果宝子们想描绘一条像“乾坤大挪移”般自由流畅的曲线,那便可以借助 SurfacePlot 来用数学函数得偿所愿。

下面的代码犹如一套行云流水的剑法,将数学的深奥与图形的简洁相结合,点滴之间尽显工艺之精妙:

import SwiftUI
import Chartsstruct SurfacePlotChart: View {var body: some View {NavigationStack {Chart3D {SurfacePlot(x: "X", y: "Y", z: "Z") { x, z inlet h = hypot(x, z)return sin(h) / h * 2}.foregroundStyle(.heightBased)}.chartXScale(domain: -10...10).chartZScale(domain: -10...10).chartYScale(domain: -0.23...10).navigationTitle("Chart3D 心法传功")}}
}

这就像是武林中的一招“飞燕回旋”,优雅、流畅,同时又极具威力:

在这里插入图片描述

当各位微秃侠客们把数学函数转化为三维曲面,它就不再只是抽象的公式,而是化身为一场精彩的武林争斗,令人叹为观止。

4. 握剑诀——交互与视角

然而,江湖变幻莫测,如何在纷繁复杂的数据中保持清醒的视角,便成为了每个剑客面临的严峻挑战。

Chart3D 的强大之处不仅仅在于它能够描绘出三维的世界,更在于它提供了丰富的交互功能,能够根据需要调整视角,让宝子们从不同角度观看同一数据的图表,仿佛随时可以恣意改变剑法招式那般美妙。

在这里插入图片描述

以下代码示范了如何通过手势控制图表的旋转角度,并且设置初始的视角与相机投影,这种灵活性犹如大侠挥剑的自由度,让小伙伴们在数据的世界里遨游无碍:

struct ContentView: View {@State var data = [(Int,Int)]()private func createData() {for _ in 0...99 {let x = Int.random(in: 0...100)let y = Int.random(in: 0...100)data.append((x, y))}}@State private var pose = Chart3DPose(azimuth: .degrees(20),    // 水平角度inclination: .degrees(15) // 垂直角度)var body: some View {NavigationStack {Chart3D(data.indices, id: \.self) { index inlet item = data[index]PointMark(x: .value("X", item.0),y: .value("Y", item.1),z: .value("Z", index)).foregroundStyle(.red.gradient)}.task {createData()}.chartXAxisLabel("X轴").chartYAxisLabel("Y轴").chartZAxisLabel("Z轴").chart3DPose($pose).navigationTitle("Charts 心法展示")}}
}

宝子们可以像大侠操控剑气那般,调整图表的角度与视野,每一次变化,都能带来全新的观感与体验:

在这里插入图片描述

同样我们略施小计,之前的曲面图也可以如法炮制:

在这里插入图片描述

从此,数据的世界也因此变得不再单调,而是充满了无限可能。

5. 3D 图表修炼的注意事项

5.1 避免数据过载

虽然 3D 图表能够展示丰富的数据信息,但在使用时也要注意避免数据过载。过多的数据点或过于复杂的数据维度,会让图表变得混乱不堪,就像武林高手在战斗中面对过多的敌人,反而会陷入困境。开发者需要对数据进行筛选和精简,突出重点,确保图表清晰可读性。

5.2 谨慎选择图表类型

不同的图表类型适用于不同的数据展示场景,在使用 3D 图表时,要根据数据的特点和分析目的,谨慎选择合适的图表样式。

例如,3D 柱状图适合用于对比数据,3D 散点图适合分析数据之间的关系,而 3D 饼图则不太适合这些场景,因为在三维空间中,饼图的角度和比例可能会让人产生视觉误解。

选择合适的图表类型,就像武林高手选择了合适的兵器,才能发挥出最大威力。

5.3 性能优化不容忽视

由于 3D 图表的渲染和计算量较大,容易对应用的性能产生影响。因此,在开发过程中,要注重性能优化。

可以采用异步加载数据、使用高效的数据结构和算法、合理利用缓存等方法,确保图表的加载和交互丝一般流畅顺滑,不给用户带来卡顿体验。否则,就像内力不足的武林高手,招式施展起来也会大打折扣。

6. 尾声:3D 图表开启数据可视化新纪元

从最初的 2D 图表到如今的 3D 图表,SwiftUI 7 的 Charts 框架在数据可视化的江湖中不断进化,为开发者们提供了越来越强大的工具。

3D 图表的出现,不仅让数据可视化变得更加生动、直观,也为武林高手们开辟了一片全新的江湖。

在这里,宝子们可以凭借自己的智慧和技艺,运用 3D 图表这一绝世神功,将数据的魅力展现得淋漓尽致,为用户带来前所未有的数据探索体验。

在这里插入图片描述

在未来的 iOS 开发江湖中,3D 图表必将成为开发者们手中的一把利器,助力他们在数据可视化领域中披荆斩棘,创造出更多令人惊叹的应用。而每一位开发者,都将在这个充满机遇与挑战的江湖中,书写属于自己的传奇故事。让我们怀揣着对技术的热爱和追求,勇敢地踏入这片新江湖,探索 3D 图表的无限未来吧!

此时,数据的江湖,已经不再是一个简单的平面,而是充满了三维空间的无限元宇宙,正如你们已然成为了这片江湖中举世无双的大侠一样,棒棒哒!

那么,感谢各位少侠的观赏!再会啦!😎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/913809.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/913809.shtml
英文地址,请注明出处:http://en.pswp.cn/news/913809.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue+Element Plus 中按回车刷新页面问题排查与解决

VueElement Plus 中按回车刷新页面问题排查与解决原因分析解决方案方法一:阻止默认行为 submit.prevent方法二:只监听回车并触发搜索最终推荐写法如下:在使用 Vue 3 Element Plus 开发后台系统时,我们常常会通过 搭配 实现搜索功…

x86汇编语言入门基础(三)汇编指令篇3 位移运算

位移运算指令:SHL逻辑移位,SAR算术移位, ROR循环右移 1. SHL 逻辑移位 Shift Left, SHL代表向左移位,SHR代表向右移位 指令格式:shl op1, op2 目的操作数 op1:寄存器/内存地址源操作数 op2:寄…

Java-69 深入浅出 RPC 单体架构 垂直架构 分布式架构 微服务架构

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) AI炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私有…

Android 如何阻止应用自升级

问题背景 1.打开PlayStore,然后登陆账户 2.退出应用过几分钟后,应用会自动更新到新版本 3.再次打开应用,问题即可复现 一联网进入playStore应用并且登录谷歌账号,退出几分钟,在进入,发现应用版本号更新了,应用进行了自我升级,关键是升级之后谷歌商店就用不了了,就…

Docker-构建镜像并实现LNMP架构

一、搭建LNMP基础配置1、制作Nginx镜像制作dockerfilevim dockerfileFROM centos:7 RUN rm -rf /etc/yum.repos.d/* RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo RUN yum clean all RUN yum makecache RUN yum -y install z…

Python之--基本知识

基本输出语法结构: print(输出内容)print()函数完整的语法格出: print (value,...,sep,end\n,fileNone)只有字符串可以用连接基本输入语法结构: xinput(提示文字’)注意事项: 无论输入的数据是什么 x 的数据类型都是字符串类型示例:name input("Enter your na…

VS CodeC51 单片机开发环境搭建

文章目录前言1.安装插件2.创建EIDE项目(51单片机)3.配置工具链(第一次使用需要配置)4.编译与下载5.项目文件简介与串口调试工具6.推荐插件7.打包模板与导出模板8.51单片机串口无法识别问题前言 需要安装keil c51版本需要配置好C/…

国密算法(SM2/SM3/SM4)

文章目录国密算法(SM2/SM3/SM4)详解:从性能对比到Java手机号安全处理实战一、 国密核心算法简介二、 性能深度对比三、 Java实战:手机号的安全处理方案一:使用SM3哈希存储(推荐用于验证场景)方案…

从前端转go开发的学习路线

从前端开发转向 Go(Golang)后端开发,是一个非常可行也很实用的方向,特别是在做 高性能微服务、分布式系统、云原生(如Kubernetes) 等方面。以下是一份适合你(有多年开发经验的前端开发者&#x…

node或浏览器上传文件到阿里云OSS

阿里云配置 进入阿里云OSS Bucket 列表的某个 Bucket 仓库下,点击访问控制 RAM 创建用户 勾上 创建 AccessKey ID 和 AccessKey Secret 复制 AccessKey 信息 用文档保存 创建角色 选择云账号 复制 ARN 用文档保存,然后 新增权限 搜索 oss 选择 AliyunOSS…

26考研物理复试面试常见问答问题汇总,物理专业保研推免夏令营面试问题汇总,物理本科知识专业面试最全攻略!

还在为物理考研复试面试发愁?还在为物理招聘的专业面试抓狂?还在为即将到来的物理夏令营面试不知从何下手、翻遍了厚厚的教材却抓不住重点?别慌,接下来我会从「考研的物理复试经历」「物理面试攻略」「物理面试基础问答题汇总很全…

(5)机器学习小白入门 YOLOv:数据需求与图像不足应对策略

(1)机器学习小白入门YOLOv :从概念到实践 (2)机器学习小白入门 YOLOv:从模块优化到工程部署 (3)机器学习小白入门 YOLOv: 解锁图片分类新技能 (4)机器学习小白入门YOLOv :图片标注实操手册 (5)机器学习小白入门 YOLOv:…

百年制造名企,三菱重工引领“智”造新范式

日前,由深圳软件协会指导、法大大和信息侠联合出品的《制造行业合同数智化升级白皮书》(以下简称“白皮书”)正式发布,并首次提出 “电子签法律AI” 双轮驱动模型。在制造行业面临供应链协同、合规风控及全球化出海等多重挑战的当…

【学习笔记】计算机操作系统(七)—— 文件管理

第七章 文件管理 文章目录第七章 文件管理7.1 文件和文件系统7.1.1 数据项、记录和文件7.1.2 文件名和类型7.1.3 文件系统的层次结构7.1.4 文件操作7.2 文件的逻辑结构7.2.1 文件逻辑结构的类型7.2.2 顺序文件(Sequential File)7.2.3 记录寻址7.2.4 索引文件(Index File)7.2.5 …

基于PyQt5与深度学习的可视化水果识别系统(集成CNN, MobileNetV2, VGG16)

一、项目概述 大家好!今天我将分享一个我近期完成的深度学习项目——一个功能强大的、带图形化界面(GUI)的水果识别系统。该系统不仅能识别静态图片中的水果,还集成了模型训练、评估、数据增强等功能于一体,为深度学习…

k8s-服务发布基础

目录 Service的定义 核心定义 Service 的类型 关键组件与机制 工作流程示例 高级特性 Service工作原理 核心工作原理 标签选择器(Label Selector) Endpoints 对象 网络代理与负载均衡(kube-proxy) userspace 模式&#…

洛谷P1514 [NOIP 2010 提高组] 引水入城

洛谷P1514 [NOIP 2010 提高组] 引水入城 洛谷题目传送门 题目背景 NOIP2010 提高组 T4 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个 NNN 行 MMM 列的矩形&#xff…

【unity小技巧】国内Unity6下载安装和一些Unity6新功能使用介绍

文章目录前言一、安装1、国外下载2、国内下载二、常用的新功能变化1、官方推荐使用inputsystem进行输入控制2、修复了InputSystem命名错误导致listen被遮挡的bug3、自带去除unity启动画面logo功能4、unity官方的behavior行为树插件5、linearVelocity代替过时的velocity方法6、随…

Rust 中字符串类型区别解析

在 Rust 中,"hello" 和 String::from("hello") 都表示字符串,但它们在内存表示、所有权和可变性上有本质区别:1. 类型与内存表示"hello" (字符串字面量):类型为 &str(字符串切片引用…

springMVC05-异常处理器

在 SpringMVC 中,异常处理是一个非常重要的功能,它可以让你优雅地处理程序抛出的各种异常,向用户展示友好的提示,而不是显示一堆报错信息(如 500 页面)。一、SpringMVC的异常处理器返回的是ModelAndView&am…