界面Swift
SwiftUI-Data-Visualization
面向 iOS 和 macOS SwiftUI 的统计、金融和实时图表,建立在 Swift Charts 之上。
7星标数最新版本: v2.0.1更新时间: 2026年10月15日
支持平台:iOS 17macOS 14
许可证: MIT
一个无依赖的 Swift package,包含十种图表 view——时间序列、histogram、箱线图、带趋势线的散点图、candlestick、瀑布图、热力图、雷达图、treemap 和实时行情——以及背后公开的分析类型:Histogram、BoxPlotSummary、LinearRegression、MovingAverage、NiceScale、TreemapLayout 和 Largest-Triangle-Three-Buckets 降采样算法。非有限数值的输入会被忽略,极端值会按文档中说明的上限绘制,测试套件会用这些极端输入渲染每一种图表。
功能特性
- TimeSeriesChart 用 LTTB 把每个序列降采样到 1,000 个点,绘制移动平均线,可在可见时间窗口内滚动,并报告所选日期
- 统计图表:HistogramChart(Sturges、Freedman–Diaconis、固定宽度或固定数量),带 Tukey whisker 的 BoxPlotChart,带最小二乘趋势线的 ScatterChart
- 金融图表:带 Candle.aggregate(_:interval:) 的 CandlestickChart,以及带合计值的 WaterfallChart
- HeatmapChart、RadarChart 和一个 squarified 算法的 TreemapChart;雷达图和行情图用 Canvas 绘制,treemap 用纯 SwiftUI view 绘制;三者都为 VoiceOver 附加了 AudioGraphDescriptor
- 通过 RingBuffer 和可观察的 LiveSeries 为 LiveTickerChart 提供实时数据
- 分析层是公开且 Sendable 的,因此可以在你自己的 Chart 中使用,或在 main actor 之外使用
- 通过 .chartPalette(_:) 设置的配色方案,包括一种适合色盲用户的配色;ChartExport 可以把图表渲染为 PNG 数据或 CGImage
- 一个把 nan、无穷大、Int.max、极端区间和极端日期传给分析类型,并用它们渲染每种图表的测试套件
快速开始
swift
1import SwiftUI2import SwiftUIDataVisualization3 4struct ContentView: View {5 let steps = TimeSeries(6 name: "Steps",7 values: [4_200, 8_100, 6_900, 10_400, 7_800, 12_100, 9_300],8 start: .now.addingTimeInterval(-6 * 86_400),9 interval: 86_40010 )11 12 var body: some View {13 TimeSeriesChart(steps)14 .frame(height: 240)15 .padding()16 }17}安装
Swift Package Manager
swift
1dependencies: [2 .package(url: "https://github.com/muhittincamdali/SwiftUI-Data-Visualization.git", from: "2.0.0")3],4targets: [5 .target(name: "YourApp", dependencies: [6 .product(name: "SwiftUIDataVisualization", package: "SwiftUI-Data-Visualization")7 ])8]Xcode
text
1https://github.com/muhittincamdali/SwiftUI-Data-Visualization.git截图
















时间线
仓库以 bar、pie、散点图和 candlestick view 开放
发布 1.0.0 版本;其源码无法用当前版本的 Xcode 构建
移除了旧模块,将 package 精简为一个小型占位代码
在 Swift Charts 基础上重建为 2.0.0,迁入了已归档的 SwiftUI-Charts-Pro 中经过测试的算法和图表
2.0.1:在传给 Swift Charts 之前,极端大的有限数值会被夹断;同一日期的所有 candle 都会被绘制