The Charts framework is considered one of my favorite options for the brand new model of SwiftUI in iOS 16. Previous to iOS 16, you could construct your individual charts or depend on third social gathering library to render charts for you. With the discharge of this new framework, Apple has made it very straightforward for builders to create animated and interactive charts.
I’ve briefly mentioned the utilization of the Charts API in this put up. For this tutorial, let’s see learn how to use the APIs to create a line chart.
The Climate Information
To display the SwiftUI Charts API, we are going to create a line chart that shows the typical temperature of Hong Kong, Taipei, and London from 2021-Jul to 2022-Jun.
To retailer the climate knowledge, I created a WeatherData
struct like beneath:
  init(12 months: Int, month: Int, day: Int, temperature: Double) {
    self.date = Calendar.present.date(from: .init(12 months: 12 months, month: month, day: day)) ?? Date()
    self.temperature = temperature
  }
}
struct WeatherData: Identifiable {   let id = UUID()   let date: Date   let temperature: Double    init(12 months: Int, month: Int, day: Int, temperature: Double) {     self.date = Calendar.present.date(from: .init(12 months: 12 months, month: month, day: day)) ?? Date()     self.temperature = temperature   } } |
The Chart
initializer takes in an inventory of Identifiable
objects. That is why we make the WeatherData
conform the Identifiable
protocol.
For every metropolis, we create an array to retailer the climate knowledge. Right here is an instance for London:
let londonWeatherData = [ WeatherData(year: 2021, month: 7, day: 1, temperature: 19.0), Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â WeatherData(year: 2021, month: 8, day: 1, temperature: 17.0), Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â WeatherData(year: 2021, month: 9, day: 1, temperature: 17.0), Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â WeatherData(year: 2021, month: 10, day: 1, temperature: 13.0), Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â WeatherData(year: 2021, month: 11, day: 1, temperature: 8.0), Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â WeatherData(year: 2021, month: 12, day: 1, temperature: 8.0), Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â WeatherData(year: 2022, month: 1, day: 1, temperature: 5.0), Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â WeatherData(year: 2022, month: 2, day: 1, temperature: 8.0), Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â WeatherData(year: 2022, month: 3, day: 1, temperature: 9.0), Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â WeatherData(year: 2022, month: 4, day: 1, temperature: 11.0), Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â WeatherData(year: 2022, month: 5, day: 1, temperature: 15.0), Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â WeatherData(year: 2022, month: 6, day: 1, temperature: 18.0) ] |
To retailer the climate knowledge of the cities, we even have an array for that:
let chartData = [ (city: “Hong Kong”, data: hkWeatherData), Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â (city: “London”, data: londonWeatherData), Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â (city: “Taipei”, data: taipeiWeatherData) ] |
Making a Easy Line Chart Utilizing Chart and LineMark
To create any forms of chart utilizing the Charts framework, you need to first import the Charts
framework:
Subsequent, you begin with the Chart
view. Contained in the Chart
view, you present a set of LineMark
to create a line chart. Right here is an instance:
struct SimpleLineChartView: View {     var physique: some View {         VStack {             Chart {                 ForEach(hkWeatherData) { merchandise in                     LineMark(                         x: .worth(“Month”, merchandise.date),                         y: .worth(“Temp”, merchandise.temperature)                     )                 }             }             .body(top: 300)         }     } } |
What the code above does is to plot a line chart for displaying the typical temperature of Hong Kong. The ForEach
assertion loops by means of all gadgets saved in hkWeatherData
. For every merchandise, we create a LineMark
object that the x
axis is about to the date and the y
axis is about to the typical temperature.
Optionally, you may resize the chart utilizing the body
modifier. Should you preview the code in Xcode preview, it’s best to see the next line chart:
Customizing Chart Axes
You possibly can customise each x and y axes by utilizing the chartXAxis
and chartYAxis
modifiers respectively. Let’s say, if we wish to show the month labels utilizing the digit format, we will connect the chartXAxis
modifier to the Chart
view like this:
.chartXAxis {     AxisMarks(values: .stride(by: .month)) { worth in         AxisGridLine()         AxisValueLabel(format: .dateTime.month(.defaultDigits))        } } |
Inside chartXAxis
, we create a visible mark known as AxisMarks
for the values of month. For every worth, we show a price label by utilizing a particular format. This line of code tells SwiftUI chart to make use of the digit format:
.dateTime.month(.defaultDigits) |
On high of that, we added some grid traces by utilizing AxisGridLine
.
For the y-axis, as an alternative of show the axis on the trailing (or proper) facet, we wish to change it to the main (or left) facet. To try this, connect the chartYAxis
modifier like this:
.chartYAxis { Â Â Â Â AxisMarks(place: .main) } |
Should you’ve made the change, Xcode preview ought to replace the chart like beneath. The y-axis is moved to the left facet and the format of month is modified. Plus, it’s best to see some grid traces.
Customizing the Background Colour of the Plot Space
The chartPlotStyle
modifier permits you to change the background colour of the plot space. Connect the modifier to the Chart
view like this:
.chartPlotStyle { plotArea in     plotArea         .background(.blue.opacity(0.1)) } |
We will then change the plot space utilizing the background
modifier. For instance, we alter the plot space to mild blue.
Making a Multi-line Chart
Now the chart shows a single supply of information (i.e. the climate knowledge of Hong Kong), so how can we show the climate knowledge of London and Taipei in the identical line chart?
You possibly can rewrite the code of Chart
view like this:
Chart {     ForEach(chartData, id: .metropolis) { collection in         ForEach(collection.knowledge) { merchandise in             LineMark(                 x: .worth(“Month”, merchandise.date),                 y: .worth(“Temp”, merchandise.temperature)             )         }         .foregroundStyle(by: .worth(“Metropolis”, collection.metropolis))     } } |
We’ve got one other ForEach
to loop by means of all of the cities of the chart knowledge. Right here, the foregroundStyle
modifier is used to use a special colour for every line. You don’t should specify the colour. SwiftUI will routinely decide the colour for you.
Proper now, all of the cities share the identical image. If you wish to use a definite image, place the next line of code after foregroundStyle
:
.image(by: .worth(“Metropolis”, collection.metropolis)) |
Now every metropolis has its personal image within the line chart.
Customizing the Interpolation Methodology
You possibly can alter the interpolation technique of the road chart by attaching the interpolationMethod
modifier to LineMark
. Right here is an instance:
.interpolationMethod(.stepStart) |
Should you change the interpolation technique to .stepStart
, the road chart now seems like this:
Apart from .stepStart
, you may check out the next choices:
- cardinal
- catmullRom
- linear
- monotone
- stepCenter
- stepEnd
Abstract
The Charts framework is a good addition to SwiftUI. Even when you simply start studying SwiftUI, you may create pleasant charts with a number of traces of code. Whereas this tutorial focuses on line charts, the Charts API makes it very straightforward for builders to transform the chart to different types similar to bar chart. You possibly can try the Swift Charts documentation for additional studying.
Observe: We’re updating our Mastering SwiftUI e-book for iOS 16. If you wish to begin studying SwiftUI, try the e-book right here. You’ll obtain a free replace later this 12 months.