Dark Mode

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

AppPear/ChartView

Repository files navigation

SwiftUICharts

SwiftUICharts is a composable, SwiftUI-native chart library for iOS 13+.

2.0.0 is a major release focused on immutable configuration, environment-driven composition, and modifier-based APIs.

AI Agent Quick Context

Use this section when an AI agent generates code against this package.

API contract

  • Use only 2.x composable APIs.
  • Do not use legacy 1.x types or mutating chains.
  • Build charts with ViewModifier composition.
  • Keep data source semantics explicit:
    • chartData([Double]) = categorical slots
    • chartData([(Double, Double)]) = numeric/continuous domain

Use these APIs

Task API
Set data chartData(...)
Set ranges chartXRange(...), chartYRange(...)
Style chart chartStyle(...)
Grid config chartGridLines, chartGridStroke, chartGridBaseline
Axis labels/ticks chartXAxisLabels, chartYAxisLabels, chartXAxisAutoTicks, chartYAxisAutoTicks
Line tuning chartLineWidth, chartLineStyle, chartLineMarks, chartLineAnimation
Shared interaction chartInteractionValue(...)
Callback interaction chartSelectionHandler { event in ... }
Streaming data ChartStreamingDataSource + chartData(stream)
Large datasets chartPerformance(...)

Avoid these legacy APIs

  • LineChartView, BarChartView, PieChartView, MultiLineChartView
  • .data(...), .rangeX(...), .rangeY(...)
  • .setAxisXLabels(...), .setNumberOfHorizontalLines(...)
  • .showChartMarks(...) (old form)

Installation

Add with Swift Package Manager:

https://github.com/AppPear/ChartView

For this release, use tag 2.0.0 (or from: "2.0.0" up to next major).

30-Second Quick Start

import SwiftUI
import SwiftUICharts

struct DemoView: View {
var body: some View {
AxisLabels {
ChartGrid {
LineChart()
.chartData([12, 34, 23, 18, 36, 22, 26])
.chartYRange(10...40)
.chartLineMarks(true, color: ColorGradient(.blue, .purple))
.chartStyle(
ChartStyle(
backgroundColor: .white,
foregroundColor: ColorGradient(.blue, .purple)
)
)
}
.chartGridLines(horizontal: 5, vertical: 6)
}
.chartXAxisLabels(["M", "T", "W", "T", "F", "S", "S"])
.chartAxisColor(.secondary)
.chartAxisFont(.caption)
.frame(height: 220)
.padding()
}
}

Feature Recipes

1) Mixed bar + line

AxisLabels {
ChartGrid {
BarChart()
.chartData([2, 4, 1, 3, 5])
.chartStyle(ChartStyle(backgroundColor: .white,
foregroundColor: ColorGradient(.orange, .red)))

LineChart()
.chartData([2, 4, 1, 3, 5])
.chartLineMarks(true)
.chartStyle(ChartStyle(backgroundColor: .white,
foregroundColor: ColorGradient(.blue, .purple)))
}
.chartGridLines(horizontal: 5, vertical: 5)
}
.chartXAxisLabels([(0, "A"), (1, "B"), (2, "C"), (3, "D"), (4, "E")], range: 0...4)

2) Shared interaction state

let selected = ChartValue()

VStack(alignment: .leading) {
ChartLabel("Weekly Sales", type: .title)
ChartLabel("Drag bars", type: .legend, format: "%.1f")

BarChart().chartData([14, 22, 18, 31, 26, 19, 24])
}
.chartInteractionValue(selected)

3) Callback-based interaction

BarChart()
.chartData([8, 11, 13, 9, 12])
.chartSelectionHandler { event in
guard event.isActive,
let value = event.value,
let index = event.index else { return }
print("selected", index, value)
}

4) Dynamic streaming data

@ObservedObject private var stream = ChartStreamingDataSource(
initialValues: [18, 23, 20, 27, 29, 24],
windowSize: 6,
autoScroll: true
)

LineChart()
.chartData(stream)
.chartYRange(stream.suggestedYRange)

5) Performance mode for large datasets

LineChart()
.chartData(largeSeries)
.chartPerformance(.automatic(threshold: 600,
maxPoints: 180,
simplifyLineStyle: true))

Migration

This is a major breaking release.

Documentation Map

Example App

The showcase app demonstrates all major features:

Examples/SwiftUIChartsShowcase

Release Notes

  • Changelog: CHANGELOG.md
  • Includes Apple privacy manifest: Sources/SwiftUICharts/PrivacyInfo.xcprivacy

About

ChartView made in SwiftUI

Topics

Resources

Readme

License

MIT license

Stars

Watchers

Forks

Packages

Contributors

Languages