资讯动态

DGCharts(Charts 5.x)iOS/tvOS/macOS 图表库完全指南:从安装集成到八大图表实战

发布时间:2026/9/30 7:06:59 来源:尧图企业网站定制
数据可视化图表库移动开发【免费下载链接】ChartsBeautiful charts for iOS/tvOS/OSX! The Apple side of the crossplatform MPAndroidChart.项目地址https://gitcode.com/gh_mirrors/cha/Charts点击查看免费下载DGCharts 是著名 Android 图表库 MPAndroidChart 的 Apple 侧移植为 iOS、tvOS、macOS 提供 8 种开箱即用的图表类型并支持双指缩放、拖拽平移、组合图、双轴、高亮、动画与图片导出。本指南以仓库 README.md 为主线结合 Source/Charts 源码与双端 Demo 工程完整覆盖从环境要求、三种包管理器安装、手动集成到各图表类型的实战配置与底层原理读完即可在自己的 Swift/ObjC 项目中落地图表功能。项目背景与版本现状DGCharts 的前身是 Charts 库其当前仓库版本为4.0.0同步自 MPAndroidChart 的 #f6a398b 提交。需要特别注意的是Charts 5.0 引入了破坏性变更库被更名为 DGCharts目的是避免与 Apple 官方推出的 Swift Charts 框架产生命名冲突。因此从 5.x 开始你在代码中看到的导入语句、框架名和 Pod 名都是DGCharts而不是此前的Charts。库的作者选择用 Swift 编写因为 Swift 可以被编译器高度优化且能同时用于 Swift 与 Objective-C 项目仓库自带 Demo 工程则特意用 Objective-C 编写用于演示它在 ObjC 项目中的工作方式。环境与系统要求以当前仓库为准README 明确列出 master 分支的要求Xcode 14 / Swift 5.7master 分支如未使用最新 Swift 编译器应前往 Releases 页面挑选适配的发行版而不是直接检出差分较大的 masteriOS 12.0作为EmbeddedFramework 使用tvOS 12.0macOS 10.13这些平台下限在 DGCharts.podspec 中同样得到印证ios.deployment_target 12.0、tvos.deployment_target 12.0、osx.deployment_target 10.13且swift_version 5.7。Package.swift 的平台声明为.iOS(.v12)、.tvOS(.v12)、.macOS(.v10_12)并以swiftLanguageVersions: [.v5]锁定 Swift 5 语言版本。仓库结构速览Source/Charts库的全部源码按 Animation、Charts、Components、Data、Formatters、Highlight、Renderers、Utils 等模块组织ChartsDemo-iOSiOS/tvOS 演示工程同时包含 Swift 与 Objective-C 两个版本的 DemoChartsDemo-macOSmacOS 演示工程与 Playground 图表示例Tests/ChartsTests基于快照snapshot的图表渲染测试快速体验先跑起 Demo 工程如果只想先看效果README 给出了两个可直接打开的工程ChartsDemo-iOS/ChartsDemo-iOS.xcodeproj—— iOS/tvOS 的演示工程ChartsDemo-macOS/ChartsDemo-macOS.xcodeproj—— macOS 的演示工程运行前请确认使用的 Xcode 版本受支持通常是最新 Xcode工程支持 Swift 5.0可选在工程目录执行carthage checkout拉取测试依赖如测试用框架未安装 Carthage 时需先自行获取。Demo 列表DemoListViewController覆盖了折线、柱状、气泡、蜡烛、雷达、散点、饼图、组合图、水平柱状图等全部图表类型Swift 版位于 ChartsDemo-iOS/Swift/DemosObjective-C 版位于 ChartsDemo-iOS/Objective-C/Demos两套代码一一对应便于对照学习。安装与集成三种包管理器 手动集成手动集成拖入 Xcode 工程README 给出的手动集成步骤将DGCharts.xcodeproj拖入你的工程在 target 的Frameworks, Libraries, and Embedded Content一节点击 选择DGCharts.framework在代码中import DGCharts在ObjC 工程中使用 Swift时需要引入工程的 Bridging Header通常为_YourProject-Swift.hChartsDemo 中是_ChartsDemo-Swift.h注意不要真的把_ChartsDemo-Swift.h加进工程Xcode 8.1 及更早版本在 Build Options 中勾选 Embedded Content Contains Swift CodeXcode 8.2在 Build Options 中勾选 Always Embed Swift Standard Libraries。需要特别指出的是手动集成与包管理器集成的区别前者是把源码/框架复制进工程后者是引入预编译框架两者在后续更新与编译行为上不同README 的 Troubleshooting 中也强调过这一点。CocoaPods在 Podfile 中添加pod DGChartsDGCharts是库的正式名称。如果需要 Realm 数据库支持再追加pod ChartsRealm注意旧的pod ios-charts并不是本库的正确名称它指向另一个作者的无关项目切勿混淆。DGCharts.podspec 显示该 Pod 版本为 5.1.0默认子规格为Coresource_files Source/Charts/**/*.swift并要求 CocoaPods 1.5.0同时通过resource_bundles把 Source/Charts/PrivacyInfo.xcprivacy 打包进资源以满足隐私清单要求。CarthageDGCharts 从 5.x 起附带Carthage 预构建二进制在 Cartfile 中按需选择精确或兼容版本github ChartsOrg/Charts 5.1.0 github ChartsOrg/Charts ~ 5.1.0维护者发布新版本时构建二进制的命令为carthage build --no-skip-current carthage archive ChartsSwift Package Manager在 Package.swift 的 dependencies 中声明dependencies: [ .package(url: https://github.com/ChartsOrg/Charts.git, .upToNextMajor(from: 5.1.0)) ]仓库自身的 Package.swift 暴露了两个库产品静态的DGCharts与动态的DGChartsDynamic二者都指向Source/Charts目录下的同一个 target你可以根据应用对动态库/静态库的需求选择引入。核心特性一览附源码印证README 的 Features 章节列举的核心能力几乎都能在 Source/Charts 中找到直接实现8 种图表类型折线、柱状、散点、蜡烛、气泡、饼图、雷达、水平柱状另有组合图双轴缩放触摸手势下可分别缩放 x/y 轴或双指捏合整体缩放拖拽 / 平移触摸手势平移视图组合图折线、柱状、散点、蜡烛、气泡可混搭双独立轴左侧与右侧各一条 Y 轴支持不同量纲可定制坐标轴X 轴与 Y 轴均可深度定制高亮值支持自定义弹出视图Marker保存图表可导出 PNG/JPEG 到相册或文件预定义颜色模板内置多套配色图例Legend自动生成、可定制动画x/y 轴方向的构建动画限制线Limit Lines用于标注最大值、阈值等信息完全可定制画笔、字体、图例、颜色、背景、手势、虚线等Realm 数据直连从 Realm.io 移动数据库直接绘图位于独立的 ChartsRealm 扩展中。以最常用的折线/柱状图基类 BarLineChartViewBase.swift 为例缩放与平移正是由内部的 Tap、Double-Tap、Pinch、Pan 四类手势识别器驱动见 BarLineChartViewBase.swift并对外暴露pinchZoomEnabled、doubleTapToZoomEnabled、dragXEnabled、dragYEnabled、scaleXEnabled、scaleYEnabled等开关默认值为 pinchZoom 关闭、双击缩放开启、拖拽与缩放开启见 BarLineChartViewBase.swift。同时它还提供setVisibleXRange(minXRange:maxXRange:)、setVisibleYRange(minYRange:maxYRange:axis:)等 API用于限制屏幕上可见的数据范围见 BarLineChartViewBase.swift。八大图表类型实战导航每个图表在 Demo 工程中都有对应的 Swift 与 ObjC 双版本控制器这里给出类型、要点与可参考路径LineChart折线图支持普通折线、贝塞尔曲线cubic、渐变填充、阶梯线参考 LineChart1ViewController.swift 与 MultipleLinesChartViewController.swiftBarChart柱状图支持单组与分组groupedDataSet参考 BarChartViewController.swift、MultipleBarChartViewController.swiftHorizontalBarChart水平柱状图柱条横向绘制参考 HorizontalBarChartViewController.swiftPieChart饼图支持选中扇区、半饼图、折线标注参考 PieChartViewController.swift、HalfPieChartViewController.swiftScatterChart散点图内置方形、三角、圆形、十字、X 形、箭头等 ShapeRenderer形状渲染器位于 Source/Charts/Renderers/Scatter参考 ScatterChartViewController.swiftCandleStickChart蜡烛图面向金融数据绘制开高低收参考 CandleStickChartViewController.swiftBubbleChart气泡图气泡面积代表数值大小参考 BubbleChartViewController.swiftRadarChart雷达图蛛网式多维度对比参考 RadarChartViewController.swiftCombinedChart组合图把多种图表叠加在同一坐标系参考 CombinedChartViewController.swift在 Source/Charts/Charts 目录下每种图表都是独立视图类例如 LineChartView.swift 仅需在initialize()中把renderer替换为LineChartRenderer见 LineChartView.swift即可复用基类的全部交互能力——这正体现了该库API 高度一致的设计所有图表共享同一套数据、手势与渲染管线。从 Demo 到源码折线图的完整配置拆解以 Demo 中的 LineChart1ViewController.swift 为例看一个生产级折线图是如何配置出来的import UIKit import DGCharts class LineChart1ViewController: DemoBaseViewController { IBOutlet var chartView: LineChartView! override func viewDidLoad() { super.viewDidLoad() chartView.delegate self chartView.chartDescription.enabled false chartView.dragEnabled true chartView.setScaleEnabled(true) chartView.pinchZoomEnabled true // x 轴限制线 let llXAxis ChartLimitLine(limit: 10, label: Index 10) llXAxis.lineWidth 4 llXAxis.lineDashLengths [10, 10, 0] llXAxis.labelPosition .rightBottom chartView.xAxis.gridLineDashLengths [10, 10] // Y 轴上下限限制线 let ll1 ChartLimitLine(limit: 150, label: Upper Limit) ll1.lineWidth 4 ll1.lineDashLengths [5, 5] ll1.labelPosition .rightTop let ll2 ChartLimitLine(limit: -30, label: Lower Limit) ll2.lineWidth 4 ll2.lineDashLengths [5, 5] ll2.labelPosition .rightBottom let leftAxis chartView.leftAxis leftAxis.removeAllLimitLines() leftAxis.addLimitLine(ll1) leftAxis.addLimitLine(ll2) leftAxis.axisMaximum 200 leftAxis.axisMinimum -50 leftAxis.gridLineDashLengths [5, 5] leftAxis.drawLimitLinesBehindDataEnabled true chartView.rightAxis.enabled false // 本例关闭右轴 // ... 设置 DataSet 与 Entry 后 chartView.data data } }这段代码背后对应的源码机制包括限制线ChartLimitLine定义于 Source/Charts/Components/ChartLimitLine.swift可设置线宽、虚线样式、标签位置与字体并可通过drawLimitLinesBehindDataEnabled控制绘制在数据之下还是之上坐标轴leftAxis/rightAxis都是 YAxis 实例分别持有独立的axisMaximum、axisMinimum与网格样式配置。在 BarLineChartViewBase.swift 中左右轴被定义为两个独立对象这正是双独立轴特性的实现基础例如一条折线依赖左轴、另一条依赖右轴即可在同一图内呈现不同量纲的数据手势与缩放dragEnabled、pinchZoomEnabled、setScaleEnabled等属性最终都会映射到 BarLineChartViewBase.swift 内部手势识别器的启用状态见 BarLineChartViewBase.swift 与 BarLineChartViewBase.swift可见范围控制setVisibleXRangeMaximum/setVisibleXRangeMinimum/setVisibleXRange以及对应的 Y 轴版本可把缩放限制在合理区间见 BarLineChartViewBase.swift。高亮与交互回调高亮是图表的选中反馈机制。基类 ChartViewBase.swift 定义了ChartViewDelegate协议包含chartValueSelected(_:entry:highlight:)、chartValueNothingSelected(_:)、chartScaled(_:scaleX:scaleY:)、chartTranslated(_:dX:dY:)、chartViewDidEndPanning(_:)等回调见 ChartViewBase.swift并且highlightPerDragEnabled默认开启可在拖拽过程中持续高亮见 BarLineChartViewBase.swift。高亮弹窗通过自定义 Marker 实现Demo 中可参考 XYMarkerView.swift。动画与导出动画 API 由 ChartViewBase.swift 提供一系列重载animate(xAxisDuration:)、animate(yAxisDuration:)、animate(xAxisDuration:yAxisDuration:)及带easing/easingOption的版本见 ChartViewBase.swift底层由Animator驱动且动画期间无需手动调用invalidate()刷新。导出则通过getChartImage(transparent:)生成位图再由save(to path:format:compressionQuality:)写入文件支持ImageFormat指定的 PNG/JPEG 等格式见 ChartViewBase.swift 与 ChartViewBase.swift。Demo 中对应的saveToGallery选项即走此路径。配色模板ChartColorTemplates定义于 Source/Charts/Utils/ChartColorTemplates.swift内置liberty()、joyful()、pastel()等多套 5 色模板见 ChartColorTemplates.swift可直接赋给 DataSet 的colors属性省去手工选色。文档与进一步学习当前 iOS/tvOS/macOS 版本暂无独立文档因为其 API 与 Android 版95% 相同可直接阅读 MPAndroidChart 的官方 Wiki 与文档绝大多数内容可平移使用仓库内的 ChartsDemo-iOSSwift Objective-C 双版本与 ChartsDemo-macOS 是最佳教程所有类型的用法都能在其中找到完整代码需要验证渲染正确性时可参考 Tests/ChartsTests 下的快照测试如 BarChartTests.swift、LineChartTests.swift它们覆盖了默认值、隐藏轴线、反转坐标轴、负值、堆叠柱等大量渲染场景README 还整理了一份第三方视频教程与博客文章清单涵盖 SwiftUI 集成、Realm Charts、自定义 Marker 等主题并在持续征集新的教程投稿。常见问题排查编译不过按 README 的建议依次排查区分从 CocoaPods/Carthage 安装编译好的框架与复制源码两种方式二者使用前提不同重新通读本文的安装与集成一节重点核对 Embedded Framework、Bridging Header 与 Swift 标准库嵌入选项先在 Issues 中搜索关键词仍未解决时在 Issues 中礼貌提问。其他问题 / 功能请求先搜索 Issues含已关闭的问题确认没有重复再提问或提交新 issue。许可证DGCharts 遵循 Apache License 2.0版权归 Daniel Cohen Gindi 与 Philipp Jahoda 所有详见 LICENSE。在遵守许可条款的前提下可自由用于商业与开源项目。赞分享数据可视化图表库移动开发【免费下载链接】ChartsBeautiful charts for iOS/tvOS/OSX! The Apple side of the crossplatform MPAndroidChart.项目地址https://gitcode.com/gh_mirrors/cha/Charts点击查看免费下载相关推荐AudioKit 集成指南从 Xcode 安装到 iOS/macOS/tvOS 音频开发实战AudioKit 集成指南从 Xcode 安装到 iOS/macOS/tvOS 音频开发实战 AudioKit 是一款面向 iOS、macOS含 Catal音频处理DGCharts跨平台图表库的iOS实现DGCharts跨平台图表库的iOS实现 DGCharts是一个为iOS、tvOS和macOS平台提供高质量数据可视化解决方案的图表库。它起源于2016年由数据可视化图表库移动开发WCDB编译问题知识库WCDB编译问题知识库 常见问题 1. SQLCipher链接错误解决方案见第3节 2. Zstd头文件缺失解决方案见第4节 3. 架构不兼容解决方案见第数据库嵌入式数据库ORM移动开发上一篇VimWiki发布流程揭秘滚动发布与Calver日历版本号是怎么玩的下一篇ObjectiveKit与Method Swizzling安全实现iOS方法交换的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑