README.md
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.
Use this section when an AI agent generates code against this package.
2.x composable APIs.1.x types or mutating chains.ViewModifier composition.chartData([Double]) = categorical slotschartData([(Double, Double)]) = numeric/continuous domain| 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(...) |
LineChartView, BarChartView, PieChartView, MultiLineChartView.data(...), .rangeX(...), .rangeY(...).setAxisXLabels(...), .setNumberOfHorizontalLines(...).showChartMarks(...) (old form)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).
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()
}
}
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)
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)
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)
}
@ObservedObject private var stream = ChartStreamingDataSource(
initialValues: [18, 23, 20, 27, 29, 24],
windowSize: 6,
autoScroll: true
)
LineChart()
.chartData(stream)
.chartYRange(stream.suggestedYRange)
LineChart()
.chartData(largeSeries)
.chartPerformance(.automatic(threshold: 600,
maxPoints: 180,
simplifyLineStyle: true))
This is a major breaking release.
The showcase app demonstrates all major features:
Examples/SwiftUIChartsShowcase
Sources/SwiftUICharts/PrivacyInfo.xcprivacy