Una biblioteca de gráficos / trazado para Swiftui. Trabaja en macOS, iOS, WatchOS y TVOS y tiene funciones de accesibilidad y localización integradas.
Proyecto de demostración
Documentación
Trabajando en una versión 3 con una sensación más swiftui para la API.
Gráfico de línea
Gráfico de línea lleno
Gráfico múltiple
Gráfico de línea a distancia
Gráfico de barras
Gráfico de barra a distancia
Gráfico de barras agrupado
Gráfico de barra apilada
Gráfico
Gráfico de donas

Utiliza el modelo de datos LineChartData .
LineChart ( chartData : LineChartData ) 
Utiliza el modelo de datos LineChartData .
FilledLineChart ( chartData : LineChartData ) 
Utiliza el modelo de datos MultiLineChartData .
MultiLineChart ( chartData : MultiLineChartData ) 
Utiliza el modelo de datos RangedLineChart .
RangedLineChart ( chartData : RangedLineChartData )
Utiliza el modelo de datos BarChartData .
BarChart ( chartData : BarChartData ) 
Utiliza el modelo de datos RangedBarChartData .
RangedBarChart ( chartData : RangedBarChartData ) 
Utiliza el modelo de datos GroupedBarChartData .
GroupedBarChart ( chartData : GroupedBarChartData ) 
Utiliza el modelo de datos StackedBarChartData .
StackedBarChart ( chartData : StackedBarChartData )
Utiliza el modelo de datos PieChartData .
PieChart ( chartData : PieChartData ) 
Utiliza el modelo de datos DoughnutChartData .
DoughnutChart ( chartData : DoughnutChartData ) Administrador de paquetes Swift
File > Swift Packages > Add Package Dependency...
import SwiftUICharts Si tiene problemas con las vistas que no se actualizan correctamente, agregue .id() a su vista.
LineChart ( chartData : LineChartData )
. id ( LineChartData . id ) Toque la superposición
Caja de información
Caja de información flotante
Caja
Leyendas
Línea promedio
Y Punto de interés del eje
Cuadrícula de eje x
Rejilla del eje y
Etiquetas de eje x
Etiquetas de eje y
Línea de tendencia lineal
Marcadores de puntos
El orden de los modificadores de la vista es algo importante como los modificadores son varios tipos de pilas que envuelven las vistas anteriores.
Detecta la entrada desde el toque del puntero. Encuentra el punto de datos más cercano y muestra la información relevante donde se especifica.
La ubicación del cuadro de información se establece en ChartStyle -> infoBoxPlacement .
. touchOverlay ( chartData : CTChartData , specifier : String , unit : TouchUnit )Configuración dentro de los datos del gráfico -> Estilo del gráfico
Muestra la información de la superposición táctil si InfoBoxPlacement está configurada en .infoBox .
La ubicación del cuadro de información se establece en ChartStyle -> infoBoxPlacement .
. infoBox ( chartData : CTChartData ) Muestra la información de la superposición táctil si InfoBoxPlacement está configurada en .floating .
La ubicación del cuadro de información se establece en ChartStyle -> infoBoxPlacement .
. floatingInfoBox ( chartData : CTChartData ) Muestra los metadatos sobre el gráfico, establecido en Chart Data -> ChartMetadata
Muestra la información de la superposición táctil si InfoBoxPlacement se establece en .header .
La ubicación del cuadro de información se establece en ChartStyle -> infoBoxPlacement .
. headerBox ( chartData : CTChartData ) Muestra leyendas.
. legends ( )Presenta marcadores sobre cada uno de los puntos de datos.
Muestra una línea de marcador en el promedio de todos los puntos de datos.
. averageLine ( chartData : CTLineBarChartDataProtocol ,
markerName : " Average " ,
labelPosition : . yAxis ( specifier : " %.0f " ) ,
lineColour : . primary ,
strokeStyle : StrokeStyle ( lineWidth : 3 , dash : [ 5 , 10 ] ) )Punto de interés configurable
. yAxisPOI ( chartData : CTLineBarChartDataProtocol ,
markerName : " Marker " ,
markerValue : 123 ,
labelPosition : . center ( specifier : " %.0f " ) ,
labelColour : Color . black ,
labelBackground : Color . orange ,
lineColour : Color . orange ,
strokeStyle : StrokeStyle ( lineWidth : 3 , dash : [ 5 , 10 ] ) )Agrega líneas verticales a lo largo del eje x.
. xAxisGrid ( chartData : CTLineBarChartDataProtocol ) Configuración dentro de ChartData -> ChartStyle .
Agrega líneas horizontales a lo largo del eje Y.
. yAxisGrid ( chartData : CTLineBarChartDataProtocol ) Configuración dentro de ChartData -> ChartStyle .
Etiquetas para el eje x.
. xAxisLabels ( chartData : CTLineBarChartDataProtocol ) Configuración dentro de ChartData -> ChartStyle .
Etiquetas generadas automáticamente para el eje y
. yAxisLabels ( chartData : CTLineBarChartDataProtocol , specifier : " %.0f " ) Configuración dentro de ChartData -> ChartStyle .
yaxislabeltype:
case numeric // Auto generated, numeric labels.
case custom // Custom labels array La costumbre se establece en ChartData -> yAxisLabels
Una línea a través del gráfico para mostrar la tendencia en los datos.
. linearTrendLine ( chartData : CTLineBarChartDataProtocol ,
firstValue : Double ,
lastValue : Double ,
lineColour : ColourStyle ,
strokeStyle : StrokeStyle )Presenta marcadores sobre cada uno de los puntos de datos.
. pointMarkers ( chartData : CTLineChartDataProtocol ) Configuración dentro Data Set -> PointStyle .
Agrega una línea independiente sobre LlenfleLinEchart.
. filledTopLine ( chartData : LineChartData ,
lineColour : ColourStyle ,
strokeStyle : StrokeStyle )Permite una línea dura sobre el punto de datos con un relleno semi opaco.
struct LineChartDemoView : View {
let data : LineChartData = weekOfData ( )
var body : some View {
VStack {
LineChart ( chartData : data )
. pointMarkers ( chartData : data )
. touchOverlay ( chartData : data , specifier : " %.0f " )
. yAxisPOI ( chartData : data ,
markerName : " Step Count Aim " ,
markerValue : 15_000 ,
labelPosition : . center ( specifier : " %.0f " ) ,
labelColour : Color . black ,
labelBackground : Color ( red : 1.0 , green : 0.75 , blue : 0.25 ) ,
lineColour : Color ( red : 1.0 , green : 0.75 , blue : 0.25 ) ,
strokeStyle : StrokeStyle ( lineWidth : 3 , dash : [ 5 , 10 ] ) )
. yAxisPOI ( chartData : data ,
markerName : " Minimum Recommended " ,
markerValue : 10_000 ,
labelPosition : . center ( specifier : " %.0f " ) ,
labelColour : Color . white ,
labelBackground : Color ( red : 0.25 , green : 0.75 , blue : 1.0 ) ,
lineColour : Color ( red : 0.25 , green : 0.75 , blue : 1.0 ) ,
strokeStyle : StrokeStyle ( lineWidth : 3 , dash : [ 5 , 10 ] ) )
. averageLine ( chartData : data ,
strokeStyle : StrokeStyle ( lineWidth : 3 , dash : [ 5 , 10 ] ) )
. xAxisGrid ( chartData : data )
. yAxisGrid ( chartData : data )
. xAxisLabels ( chartData : data )
. yAxisLabels ( chartData : data )
. infoBox ( chartData : data )
. headerBox ( chartData : data )
. legends ( chartData : data , columns : [ GridItem ( . flexible ( ) ) , GridItem ( . flexible ( ) ) ] )
. id ( data . id )
. frame ( minWidth : 150 , maxWidth : 900 , minHeight : 150 , idealHeight : 250 , maxHeight : 400 , alignment : . center )
}
. navigationTitle ( " Week of Data " )
}
static func weekOfData ( ) -> LineChartData {
let data = LineDataSet ( dataPoints : [
LineChartDataPoint ( value : 12000 , xAxisLabel : " M " , description : " Monday " ) ,
LineChartDataPoint ( value : 10000 , xAxisLabel : " T " , description : " Tuesday " ) ,
LineChartDataPoint ( value : 8000 , xAxisLabel : " W " , description : " Wednesday " ) ,
LineChartDataPoint ( value : 17500 , xAxisLabel : " T " , description : " Thursday " ) ,
LineChartDataPoint ( value : 16000 , xAxisLabel : " F " , description : " Friday " ) ,
LineChartDataPoint ( value : 11000 , xAxisLabel : " S " , description : " Saturday " ) ,
LineChartDataPoint ( value : 9000 , xAxisLabel : " S " , description : " Sunday " )
] ,
legendTitle : " Steps " ,
pointStyle : PointStyle ( ) ,
style : LineStyle ( lineColour : ColourStyle ( colour : . red ) , lineType : . curvedLine ) )
let metadata = ChartMetadata ( title : " Step Count " , subtitle : " Over a Week " )
let gridStyle = GridStyle ( numberOfLines : 7 ,
lineColour : Color ( . lightGray ) . opacity ( 0.5 ) ,
lineWidth : 1 ,
dash : [ 8 ] ,
dashPhase : 0 )
let chartStyle = LineChartStyle ( infoBoxPlacement : . infoBox ( isStatic : false ) ,
infoBoxBorderColour : Color . primary ,
infoBoxBorderStyle : StrokeStyle ( lineWidth : 1 ) ,
markerType : . vertical ( attachment : . line ( dot : . style ( DotStyle ( ) ) ) ) ,
xAxisGridStyle : gridStyle ,
xAxisLabelPosition : . bottom ,
xAxisLabelColour : Color . primary ,
xAxisLabelsFrom : . dataPoint ( rotation : . degrees ( 0 ) ) ,
yAxisGridStyle : gridStyle ,
yAxisLabelPosition : . leading ,
yAxisLabelColour : Color . primary ,
yAxisNumberOfLabels : 7 ,
baseline : . minimumWithMaximum ( of : 5000 ) ,
topLine : . maximum ( of : 20000 ) ,
globalAnimation : . easeOut ( duration : 1 ) )
return LineChartData ( dataSets : data ,
metadata : metadata ,
chartStyle : chartStyle )
}
}Dentro de ciertos elementos hay etiquetas adicionales para ayudar a describir el gráfico para la voz en off.
Ver Localización de accesibilidad
Todas las etiquetas apoyan la localización. Sin embargo, hay algunas etiquetas ocultas que están allí para apoyar la voz en off. Ver Localización de accesibilidad
Vea la demostración de localización en el proyecto de demostración.
Descripción sobre la descripción de un punto de datos cuando el usuario toca el área más cercana al punto de datos. La voz en off dirá <chart title>, <data point value>, <data point description> .
" %@ <local_description_of_a_data_point> " = " %@, <Description of a data point> " ; Lea antes de un poiMarker . La voz en off dirá <poi marker>, <marker legend title>, <marker value> .
" P-O-I-Marker " = " P O I Marker " ;
" Average " = " Average " ; Voz sobre descripción de un poiMarker . La voz en off dirá <POI-Marker>, <marker legend title>, <marker value> .
" <local_marker_legend_title> %@ " = " local_marker_legend_title, %@ " ; Lea antes de un axisLabel . La voz en off dirá <axisLabel>, <marker value> .
"X-Axis-Label" = "X Axis Label";
"Y-Axis-Label" = "Y Axis Label";
Lea antes de una legend . La voz en off dirá <chart type legend>, <legend title> .
" Line-Chart-Legend " = " Line Chart Legend " ;
" P-O-I-Marker-Legend " = " P O I Marker Legend " ;
" Bar-Chart-Legend " = " Bar Chart Legend " ;
" P-O-I-Marker-Legend " = " P O I Marker Legend " ;
" Pie-Chart-Legend " = " Pie Chart Legend " ;
" P-O-I-Marker-Legend " = " P O I Marker Legend " ;