{"id":"c3bc7475-fd7f-4947-9d42-a2f76a73915c","shortId":"ZW3fs3","kind":"skill","title":"Swift Charts","tagline":"Swift Ios Skills skill by Dpearson2699","description":"# Swift Charts\n\nBuild data visualizations with Swift Charts targeting iOS 26+. Compose marks\ninside a `Chart` container, configure axes and scales with view modifiers, and\nuse vectorized plots for large datasets.\n\nSee [references/charts-patterns.md](references/charts-patterns.md) for extended patterns, accessibility, and\ntheming guidance.\n\n## Contents\n\n- [Workflow](#workflow)\n- [Chart Container](#chart-container)\n- [Mark Types](#mark-types)\n- [Axis Customization](#axis-customization)\n- [Scale Configuration](#scale-configuration)\n- [Foreground Style and Encoding](#foreground-style-and-encoding)\n- [Selection (iOS 17+)](#selection-ios-17)\n- [Scrollable Charts (iOS 17+)](#scrollable-charts-ios-17)\n- [Annotations](#annotations)\n- [Legend](#legend)\n- [Vectorized Plots (iOS 18+)](#vectorized-plots-ios-18)\n- [Common Mistakes](#common-mistakes)\n- [Review Checklist](#review-checklist)\n- [References](#references)\n\n## Workflow\n\n### 1. Build a new chart\n\n1. Define data as an `Identifiable` struct or use `id:` key path.\n2. Choose mark type(s): `BarMark`, `LineMark`, `PointMark`, `AreaMark`,\n   `RuleMark`, `RectangleMark`, or `SectorMark`.\n3. Wrap marks in a `Chart` container.\n4. Encode visual channels: `.foregroundStyle(by:)`, `.symbol(by:)`, `.lineStyle(by:)`.\n5. Configure axes with `.chartXAxis` / `.chartYAxis`.\n6. Set scale domains with `.chartXScale(domain:)` / `.chartYScale(domain:)`.\n7. Add selection, scrolling, or annotations as needed.\n8. For 1000+ data points, use vectorized plots (`BarPlot`, `LinePlot`, etc.).\n\n### 2. Review existing chart code\n\nRun through the Review Checklist at the end of this file.\n\n## Chart Container\n\n```swift\n// Data-driven init (single-series)\nChart(sales) { item in\n    BarMark(x: .value(\"Month\", item.month), y: .value(\"Revenue\", item.revenue))\n}\n\n// Content closure init (multi-series, mixed marks)\nChart {\n    ForEach(seriesA) { item in\n        LineMark(x: .value(\"Date\", item.date), y: .value(\"Value\", item.value))\n            .foregroundStyle(.blue)\n    }\n    RuleMark(y: .value(\"Target\", 500))\n        .foregroundStyle(.red)\n}\n\n// Custom ID key path\nChart(data, id: \\.category) { item in\n    BarMark(x: .value(\"Category\", item.category), y: .value(\"Count\", item.count))\n}\n```\n\n## Mark Types\n\n### BarMark (iOS 16+)\n\n```swift\n// Vertical bar\nBarMark(x: .value(\"Month\", item.month), y: .value(\"Sales\", item.sales))\n\n// Stacked by category (automatic when same x maps to multiple bars)\nBarMark(x: .value(\"Month\", item.month), y: .value(\"Sales\", item.sales))\n    .foregroundStyle(by: .value(\"Product\", item.product))\n\n// Horizontal bar\nBarMark(x: .value(\"Sales\", item.sales), y: .value(\"Month\", item.month))\n\n// Interval bar (Gantt chart)\nBarMark(\n    xStart: .value(\"Start\", item.start),\n    xEnd: .value(\"End\", item.end),\n    y: .value(\"Task\", item.task)\n)\n```\n\n### LineMark (iOS 16+)\n\n```swift\n// Single line\nLineMark(x: .value(\"Date\", item.date), y: .value(\"Price\", item.price))\n\n// Multi-series via foregroundStyle encoding\nLineMark(x: .value(\"Date\", item.date), y: .value(\"Temp\", item.temp))\n    .foregroundStyle(by: .value(\"City\", item.city))\n    .interpolationMethod(.catmullRom)\n\n// Multi-series with explicit series parameter\nLineMark(\n    x: .value(\"Date\", item.date),\n    y: .value(\"Price\", item.price),\n    series: .value(\"Ticker\", item.ticker)\n)\n```\n\n### PointMark (iOS 16+)\n\n```swift\nPointMark(x: .value(\"Height\", item.height), y: .value(\"Weight\", item.weight))\n    .foregroundStyle(by: .value(\"Species\", item.species))\n    .symbol(by: .value(\"Species\", item.species))\n    .symbolSize(100)\n```\n\n### AreaMark (iOS 16+)\n\n```swift\n// Stacked area\nAreaMark(x: .value(\"Date\", item.date), y: .value(\"Sales\", item.sales))\n    .foregroundStyle(by: .value(\"Category\", item.category))\n\n// Range band\nAreaMark(\n    x: .value(\"Date\", item.date),\n    yStart: .value(\"Min\", item.min),\n    yEnd: .value(\"Max\", item.max)\n)\n.opacity(0.3)\n```\n\n### RuleMark (iOS 16+)\n\n```swift\nRuleMark(y: .value(\"Target\", 9000))\n    .foregroundStyle(.red)\n    .lineStyle(StrokeStyle(dash: [5, 3]))\n    .annotation(position: .top, alignment: .leading) {\n        Text(\"Target\").font(.caption).foregroundStyle(.red)\n    }\n```\n\n### RectangleMark (iOS 16+)\n\n```swift\nRectangleMark(x: .value(\"Hour\", item.hour), y: .value(\"Day\", item.day))\n    .foregroundStyle(by: .value(\"Intensity\", item.intensity))\n```\n\n### SectorMark (iOS 17+)\n\n```swift\n// Pie chart\nChart(data, id: \\.name) { item in\n    SectorMark(angle: .value(\"Sales\", item.sales))\n        .foregroundStyle(by: .value(\"Category\", item.name))\n}\n\n// Donut chart\nChart(data, id: \\.name) { item in\n    SectorMark(\n        angle: .value(\"Sales\", item.sales),\n        innerRadius: .ratio(0.618),\n        outerRadius: .inset(10),\n        angularInset: 1\n    )\n    .cornerRadius(4)\n    .foregroundStyle(by: .value(\"Category\", item.name))\n}\n```\n\n## Axis Customization\n\n```swift\n// Hide axes\n.chartXAxis(.hidden)\n.chartYAxis(.hidden)\n\n// Custom axis content\n.chartXAxis {\n    AxisMarks(values: .stride(by: .month)) { value in\n        AxisGridLine()\n        AxisTick()\n        AxisValueLabel(format: .dateTime.month(.abbreviated))\n    }\n}\n\n// Multiple AxisMarks compositions (different intervals for grid vs. labels)\n.chartXAxis {\n    AxisMarks(values: .stride(by: .day)) { _ in AxisGridLine() }\n    AxisMarks(values: .stride(by: .week)) { _ in\n        AxisTick()\n        AxisValueLabel(format: .dateTime.week())\n    }\n}\n\n// Axis labels (titles)\n.chartXAxisLabel(\"Time\", position: .bottom, alignment: .center)\n.chartYAxisLabel(\"Revenue ($)\", position: .leading, alignment: .center)\n```\n\n## Scale Configuration\n\n```swift\n.chartYScale(domain: 0...100)                          // Explicit numeric domain\n.chartYScale(domain: .automatic(includesZero: true))   // Include zero\n.chartYScale(domain: 1...10000, type: .log)            // Logarithmic scale\n.chartXScale(domain: [\"Mon\", \"Tue\", \"Wed\", \"Thu\"])     // Categorical ordering\n```\n\n## Foreground Style and Encoding\n\n```swift\nBarMark(...).foregroundStyle(.blue)                                    // Static color\nBarMark(...).foregroundStyle(by: .value(\"Category\", item.category))   // Data encoding\nAreaMark(...).foregroundStyle(                                         // Gradient\n    .linearGradient(colors: [.blue, .cyan], startPoint: .bottom, endPoint: .top)\n)\n```\n\n## Selection (iOS 17+)\n\n```swift\n@State private var selectedDate: Date?\n@State private var selectedRange: ClosedRange<Date>?\n@State private var selectedAngle: String?\n\n// Point selection\nChart(data) { item in\n    LineMark(x: .value(\"Date\", item.date), y: .value(\"Value\", item.value))\n}\n.chartXSelection(value: $selectedDate)\n\n// Range selection\n.chartXSelection(range: $selectedRange)\n\n// Angular selection (pie/donut)\n.chartAngleSelection(value: $selectedAngle)\n```\n\n## Scrollable Charts (iOS 17+)\n\n```swift\nChart(dailyData) { item in\n    BarMark(x: .value(\"Date\", item.date, unit: .day), y: .value(\"Steps\", item.steps))\n}\n.chartScrollableAxes(.horizontal)\n.chartXVisibleDomain(length: 3600 * 24 * 7) // 7 days visible\n.chartScrollPosition(initialX: latestDate)\n.chartScrollTargetBehavior(\n    .valueAligned(matching: DateComponents(hour: 0), majorAlignment: .page)\n)\n```\n\n## Annotations\n\n```swift\nBarMark(x: .value(\"Month\", item.month), y: .value(\"Sales\", item.sales))\n    .annotation(position: .top, alignment: .center, spacing: 4) {\n        Text(\"\\(item.sales, format: .number)\").font(.caption2)\n    }\n\n// Overflow resolution\n.annotation(\n    position: .top,\n    overflowResolution: .init(x: .fit(to: .chart), y: .padScale)\n) { Text(\"Label\") }\n```\n\n## Legend\n\n```swift\n.chartLegend(.hidden)                                           // Hide\n.chartLegend(position: .bottom, alignment: .center, spacing: 10) // Position\n.chartLegend(position: .bottom) {                                // Custom\n    HStack(spacing: 16) {\n        ForEach(categories, id: \\.self) { cat in\n            Label(cat, systemImage: \"circle.fill\").font(.caption)\n        }\n    }\n}\n```\n\n## Vectorized Plots (iOS 18+)\n\nUse for large datasets (1000+ points). Accept entire collections or functions.\n\n```swift\n// Data-driven\nChart {\n    BarPlot(sales, x: .value(\"Month\", \\.month), y: .value(\"Revenue\", \\.revenue))\n        .foregroundStyle(\\.barColor)\n}\n\n// Function plotting: y = f(x)\nChart {\n    LinePlot(x: \"x\", y: \"y\", domain: -5...5) { x in sin(x) }\n}\n\n// Parametric: (x, y) = f(t)\nChart {\n    LinePlot(x: \"x\", y: \"y\", t: \"t\", domain: 0...(2 * .pi)) { t in\n        (x: cos(t), y: sin(t))\n    }\n}\n```\n\nApply KeyPath-based modifiers before simple-value modifiers:\n\n```swift\nBarPlot(data, x: .value(\"X\", \\.x), y: .value(\"Y\", \\.y))\n    .foregroundStyle(\\.color)    // KeyPath first\n    .opacity(0.8)                // Value modifier second\n```\n\n## Common Mistakes\n\n### 1. Using ObservableObject instead of @Observable\n\n```swift\n// WRONG\nclass ChartModel: ObservableObject {\n    @Published var data: [Sale] = []\n}\nstruct ChartView: View {\n    @StateObject private var model = ChartModel()\n}\n\n// CORRECT\n@Observable class ChartModel {\n    var data: [Sale] = []\n}\nstruct ChartView: View {\n    @State private var model = ChartModel()\n}\n```\n\n### 2. Missing series parameter for multi-line charts\n\n```swift\n// WRONG -- all points connect into one line\nChart {\n    ForEach(allCities) { item in\n        LineMark(x: .value(\"Date\", item.date), y: .value(\"Temp\", item.temp))\n    }\n}\n\n// CORRECT -- separate lines per city\nChart {\n    ForEach(allCities) { item in\n        LineMark(x: .value(\"Date\", item.date), y: .value(\"Temp\", item.temp))\n            .foregroundStyle(by: .value(\"City\", item.city))\n    }\n}\n```\n\n### 3. Too many SectorMark slices\n\n```swift\n// WRONG -- 20 tiny sectors are unreadable\nChart(twentyCategories, id: \\.name) { item in\n    SectorMark(angle: .value(\"Value\", item.value))\n}\n\n// CORRECT -- group into top 5 + \"Other\"\nChart(groupedData, id: \\.name) { item in\n    SectorMark(angle: .value(\"Value\", item.value))\n        .foregroundStyle(by: .value(\"Category\", item.name))\n}\n```\n\n### 4. Missing scale domain when zero-baseline matters\n\n```swift\n// WRONG -- axis starts at ~95; small changes look dramatic\nChart(data) {\n    LineMark(x: .value(\"Day\", $0.day), y: .value(\"Score\", $0.score))\n}\n\n// CORRECT -- explicit domain for honest representation\nChart(data) {\n    LineMark(x: .value(\"Day\", $0.day), y: .value(\"Score\", $0.score))\n}\n.chartYScale(domain: 0...100)\n```\n\n### 5. Static foregroundStyle overriding data encoding\n\n```swift\n// WRONG -- static color overrides by-value encoding\nBarMark(x: .value(\"X\", item.x), y: .value(\"Y\", item.y))\n    .foregroundStyle(by: .value(\"Category\", item.category))\n    .foregroundStyle(.blue)\n\n// CORRECT -- use only the data encoding\nBarMark(x: .value(\"X\", item.x), y: .value(\"Y\", item.y))\n    .foregroundStyle(by: .value(\"Category\", item.category))\n```\n\n### 6. Individual marks for 10,000+ data points\n\n```swift\n// WRONG -- creates 10,000 mark views; slow\nChart(largeDataset) { item in\n    PointMark(x: .value(\"X\", item.x), y: .value(\"Y\", item.y))\n}\n\n// CORRECT -- vectorized plot (iOS 18+)\nChart {\n    PointPlot(largeDataset, x: .value(\"X\", \\.x), y: .value(\"Y\", \\.y))\n}\n```\n\n### 7. Fixed chart height breaking Dynamic Type\n\n```swift\n// WRONG -- clips axis labels at large text sizes\nChart(data) { ... }\n    .frame(height: 200)\n\n// CORRECT -- adaptive sizing\nChart(data) { ... }\n    .frame(minHeight: 200, maxHeight: 400)\n```\n\n### 8. KeyPath modifier after value modifier on vectorized plots\n\n```swift\n// WRONG -- compiler error\nBarPlot(data, x: .value(\"X\", \\.x), y: .value(\"Y\", \\.y))\n    .opacity(0.8)\n    .foregroundStyle(\\.color)\n\n// CORRECT -- KeyPath modifiers first\nBarPlot(data, x: .value(\"X\", \\.x), y: .value(\"Y\", \\.y))\n    .foregroundStyle(\\.color)\n    .opacity(0.8)\n```\n\n### 9. Missing accessibility labels\n\n```swift\n// WRONG -- VoiceOver users get no context\nChart(data) {\n    BarMark(x: .value(\"Month\", $0.month), y: .value(\"Sales\", $0.sales))\n}\n\n// CORRECT -- add per-mark accessibility\nChart(data) { item in\n    BarMark(x: .value(\"Month\", item.month), y: .value(\"Sales\", item.sales))\n        .accessibilityLabel(\"\\(item.month)\")\n        .accessibilityValue(\"\\(item.sales) units sold\")\n}\n```\n\n## Review Checklist\n\n- [ ] Data model uses `Identifiable` or chart uses `id:` key path\n- [ ] Model uses `@Observable` with `@State`, not `ObservableObject`\n- [ ] Mark type matches goal (bar=comparison, line=trend, sector=proportion)\n- [ ] Multi-series lines use `series:` parameter or `.foregroundStyle(by:)`\n- [ ] Axes configured with appropriate labels, ticks, and grid lines\n- [ ] Scale domain set explicitly when zero-baseline matters\n- [ ] Pie/donut limited to 5-7 sectors; small values grouped into \"Other\"\n- [ ] Selection binding type matches axis data type (`Date?` for date axis)\n- [ ] Scrollable charts set `.chartXVisibleDomain(length:)` for viewport\n- [ ] Vectorized plots used for datasets exceeding 1000 points\n- [ ] KeyPath modifiers applied before value modifiers on vectorized plots\n- [ ] Accessibility labels added to marks for VoiceOver\n- [ ] Chart tested with Dynamic Type and Dark Mode\n- [ ] Legend visible and positioned, or intentionally hidden\n- [ ] Ensure chart data model types are Sendable; update chart data on @MainActor\n\n## References\n\n- Extended patterns: [references/charts-patterns.md](references/charts-patterns.md)\n- Apple docs: [Swift Charts](https://sosumi.ai/documentation/charts)\n- Apple docs: [Creating a chart using Swift Charts](https://sosumi.ai/documentation/charts/Creating-a-chart-using-Swift-Charts)","tags":["swift","charts","ios","skills","dpearson2699"],"capabilities":["skill","source-dpearson2699","category-swift-ios-skills"],"categories":["swift-ios-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/dpearson2699/swift-ios-skills/swift-charts","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"install_from":"skills.sh"}},"qualityScore":"0.300","qualityRationale":"deterministic score 0.30 from registry signals: · indexed on skills.sh · published under dpearson2699/swift-ios-skills","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T05:40:38.040Z","embedding":null,"createdAt":"2026-04-18T20:33:36.527Z","updatedAt":"2026-04-22T05:40:38.040Z","lastSeenAt":"2026-04-22T05:40:38.040Z","tsv":"'-5':912 '-7':1444 '/documentation/charts)':1531 '/documentation/charts/creating-a-chart-using-swift-charts)':1542 '0':651,794,932,1162 '0.3':482 '0.618':565 '0.8':969,1315,1335 '0.day':1138,1155 '0.month':1353 '0.sales':1357 '0.score':1142,1159 '000':1220,1227 '1':124,129,570,665,975 '10':568,847,1219,1226 '100':445,652,1163 '1000':196,876,1475 '10000':666 '16':298,366,423,448,485,512,855 '17':84,88,92,97,530,710,759 '18':105,110,871,1248 '2':141,205,933,1013 '20':1075 '200':1280,1288 '24':781 '26':19 '3':154,498,1068 '3600':780 '4':161,572,814,1113 '400':1290 '5':171,497,913,1095,1164,1443 '500':272 '6':177,1215 '7':186,782,783,1260 '8':194,1291 '9':1336 '9000':491 '95':1127 'abbrevi':603 'accept':878 'access':46,1338,1363,1486 'accessibilitylabel':1377 'accessibilityvalu':1379 'ad':1488 'adapt':1282 'add':187,1359 'align':502,638,644,811,844 'allciti':1032,1051 'angl':541,559,1087,1104 'angular':750 'angularinset':569 'annot':98,99,191,499,797,808,823 'appl':1525,1532 'appli':943,1479 'appropri':1425 'area':451 'areamark':149,446,452,468,697 'automat':314,658 'axe':27,173,582,1422 'axi':63,66,578,588,631,1124,1270,1455,1461 'axis-custom':65 'axisgridlin':598,620 'axismark':591,605,614,621 'axistick':599,627 'axisvaluelabel':600,628 'band':467 'bar':301,321,337,348,1406 'barcolor':899 'barmark':146,235,285,296,302,322,338,351,684,689,765,799,1179,1201,1349,1368 'barplot':202,888,954,1304,1322 'base':946 'baselin':1120,1438 'bind':1452 'blue':267,686,702,1194 'bottom':637,705,843,851 'break':1264 'build':11,125 'by-valu':1175 'caption':507,867 'caption2':820 'cat':860,863 'categor':677 'categori':282,288,313,464,548,576,693,857,1111,1191,1213 'category-swift-ios-skills' 'catmullrom':400 'center':639,645,812,845 'chang':1129 'channel':164 'chart':2,10,16,24,53,56,90,95,128,159,208,221,231,252,279,350,533,534,551,552,729,757,761,831,887,905,923,1021,1030,1049,1080,1097,1132,1149,1231,1249,1262,1276,1284,1347,1364,1390,1463,1493,1509,1516,1528,1536,1539 'chart-contain':55 'chartangleselect':753 'chartlegend':838,841,849 'chartmodel':984,997,1001,1012 'chartscrollableax':776 'chartscrollposit':786 'chartscrolltargetbehavior':789 'chartview':991,1006 'chartxaxi':175,583,590,613 'chartxaxislabel':634 'chartxscal':182,671 'chartxselect':742,747 'chartxvisibledomain':778,1465 'chartyaxi':176,585 'chartyaxislabel':640 'chartyscal':184,649,656,663,1160 'checklist':117,120,214,1384 'choos':142 'circle.fill':865 'citi':397,1048,1066 'class':983,1000 'clip':1269 'closedrang':721 'closur':245 'code':209 'collect':880 'color':688,701,965,1173,1317,1333 'common':111,114,973 'common-mistak':113 'comparison':1407 'compil':1302 'compos':20 'composit':606 'configur':26,69,72,172,647,1423 'connect':1026 'contain':25,54,57,160,222 'content':50,244,589 'context':1346 'cornerradius':571 'correct':998,1044,1091,1143,1195,1244,1281,1318,1358 'cos':938 'count':292 'creat':1225,1534 'custom':64,67,275,579,587,852 'cyan':703 'dailydata':762 'dark':1499 'dash':496 'data':12,131,197,225,280,535,553,695,730,885,955,988,1003,1133,1150,1168,1199,1221,1277,1285,1305,1323,1348,1365,1385,1456,1510,1517 'data-driven':224,884 'dataset':39,875,1473 'date':260,373,388,411,455,471,716,736,768,1038,1057,1458,1460 'datecompon':792 'datetime.month':602 'datetime.week':630 'day':521,618,771,784,1137,1154 'defin':130 'differ':607 'doc':1526,1533 'domain':180,183,185,650,655,657,664,672,911,931,1116,1145,1161,1432 'donut':550 'dpearson2699':8 'dramat':1131 'driven':226,886 'dynam':1265,1496 'encod':76,81,162,384,682,696,1169,1178,1200 'end':217,358 'endpoint':706 'ensur':1508 'entir':879 'error':1303 'etc':204 'exceed':1474 'exist':207 'explicit':405,653,1144,1434 'extend':44,1521 'f':903,921 'file':220 'first':967,1321 'fit':829 'fix':1261 'font':506,819,866 'foreach':253,856,1031,1050 'foreground':73,78,679 'foreground-style-and-encod':77 'foregroundstyl':165,266,273,331,383,394,434,461,492,508,523,545,573,685,690,698,898,964,1063,1108,1166,1188,1193,1210,1316,1332,1420 'format':601,629,817 'frame':1278,1286 'function':882,900 'gantt':349 'get':1344 'goal':1405 'gradient':699 'grid':610,1429 'group':1092,1448 'groupeddata':1098 'guidanc':49 'height':428,1263,1279 'hidden':584,586,839,1507 'hide':581,840 'honest':1147 'horizont':336,777 'hour':517,793 'hstack':853 'id':138,276,281,536,554,858,1082,1099,1392 'identifi':134,1388 'includ':661 'includeszero':659 'individu':1216 'init':227,246,827 'initialx':787 'innerradius':563 'inset':567 'insid':22 'instead':978 'intens':526 'intent':1506 'interpolationmethod':399 'interv':347,608 'io':4,18,83,87,91,96,104,109,297,365,422,447,484,511,529,709,758,870,1247 'item':233,255,283,538,556,731,763,1033,1052,1084,1101,1233,1366 'item.category':289,465,694,1192,1214 'item.city':398,1067 'item.count':293 'item.date':261,374,389,412,456,472,737,769,1039,1058 'item.day':522 'item.end':359 'item.height':429 'item.hour':518 'item.intensity':527 'item.max':480 'item.min':476 'item.month':239,306,326,346,803,1372,1378 'item.name':549,577,1112 'item.price':378,416 'item.product':335 'item.revenue':243 'item.sales':310,330,342,460,544,562,807,816,1376,1380 'item.species':438,443 'item.start':355 'item.steps':775 'item.task':363 'item.temp':393,1043,1062 'item.ticker':420 'item.value':265,741,1090,1107 'item.weight':433 'item.x':1183,1205,1239 'item.y':1187,1209,1243 'key':139,277,1393 'keypath':945,966,1292,1319,1477 'keypath-bas':944 'label':612,632,835,862,1271,1339,1426,1487 'larg':38,874,1273 'largedataset':1232,1251 'latestd':788 'lead':503,643 'legend':100,101,836,1501 'length':779,1466 'limit':1441 'line':369,1020,1029,1046,1408,1415,1430 'lineargradi':700 'linemark':147,257,364,370,385,408,733,1035,1054,1134,1151 'lineplot':203,906,924 'linestyl':169,494 'log':668 'logarithm':669 'look':1130 'mainactor':1519 'majoralign':795 'mani':1070 'map':318 'mark':21,58,61,143,156,251,294,1217,1228,1362,1402,1490 'mark-typ':60 'match':791,1404,1454 'matter':1121,1439 'max':479 'maxheight':1289 'min':475 'minheight':1287 'miss':1014,1114,1337 'mistak':112,115,974 'mix':250 'mode':1500 'model':996,1011,1386,1395,1511 'modifi':32,947,952,971,1293,1296,1320,1478,1482 'mon':673 'month':238,305,325,345,595,802,892,893,1352,1371 'multi':248,380,402,1019,1413 'multi-lin':1018 'multi-seri':247,379,401,1412 'multipl':320,604 'name':537,555,1083,1100 'need':193 'new':127 'number':818 'numer':654 'observ':980,999,1397 'observableobject':977,985,1401 'one':1028 'opac':481,968,1314,1334 'order':678 'outerradius':566 'overflow':821 'overflowresolut':826 'overrid':1167,1174 'padscal':833 'page':796 'paramet':407,1016,1418 'parametr':918 'path':140,278,1394 'pattern':45,1522 'per':1047,1361 'per-mark':1360 'pi':934 'pie':532 'pie/donut':752,1440 'plot':36,103,108,201,869,901,1246,1299,1470,1485 'point':198,727,877,1025,1222,1476 'pointmark':148,421,425,1235 'pointplot':1250 'posit':500,636,642,809,824,842,848,850,1504 'price':377,415 'privat':713,718,723,994,1009 'product':334 'proport':1411 'publish':986 'rang':466,745,748 'ratio':564 'rectanglemark':151,510,514 'red':274,493,509 'refer':121,122,1520 'references/charts-patterns.md':41,42,1523,1524 'represent':1148 'resolut':822 'revenu':242,641,896,897 'review':116,119,206,213,1383 'review-checklist':118 'rulemark':150,268,483,487 'run':210 'sale':232,309,329,341,459,543,561,806,889,989,1004,1356,1375 'scale':29,68,71,179,646,670,1115,1431 'scale-configur':70 'score':1141,1158 'scroll':189 'scrollabl':89,94,756,1462 'scrollable-charts-io':93 'second':972 'sector':1077,1410,1445 'sectormark':153,528,540,558,1071,1086,1103 'see':40 'select':82,86,188,708,728,746,751,1451 'selectedangl':725,755 'selectedd':715,744 'selectedrang':720,749 'selection-io':85 'self':859 'sendabl':1514 'separ':1045 'seri':230,249,381,403,406,417,1015,1414,1417 'seriesa':254 'set':178,1433,1464 'simpl':950 'simple-valu':949 'sin':916,941 'singl':229,368 'single-seri':228 'size':1275,1283 'skill':5,6 'slice':1072 'slow':1230 'small':1128,1446 'sold':1382 'sosumi.ai':1530,1541 'sosumi.ai/documentation/charts)':1529 'sosumi.ai/documentation/charts/creating-a-chart-using-swift-charts)':1540 'source-dpearson2699' 'space':813,846,854 'speci':437,442 'stack':311,450 'start':354,1125 'startpoint':704 'state':712,717,722,1008,1399 'stateobject':993 'static':687,1165,1172 'step':774 'stride':593,616,623 'string':726 'strokestyl':495 'struct':135,990,1005 'style':74,79,680 'swift':1,3,9,15,223,299,367,424,449,486,513,531,580,648,683,711,760,798,837,883,953,981,1022,1073,1122,1170,1223,1267,1300,1340,1527,1538 'symbol':167,439 'symbols':444 'systemimag':864 'target':17,271,490,505 'task':362 'temp':392,1042,1061 'test':1494 'text':504,815,834,1274 'theme':48 'thu':676 'tick':1427 'ticker':419 'time':635 'tini':1076 'titl':633 'top':501,707,810,825,1094 'trend':1409 'true':660 'tue':674 'twentycategori':1081 'type':59,62,144,295,667,1266,1403,1453,1457,1497,1512 'unit':770,1381 'unread':1079 'updat':1515 'use':34,137,199,872,976,1196,1387,1391,1396,1416,1471,1537 'user':1343 'valu':237,241,259,263,264,270,287,291,304,308,324,328,333,340,344,353,357,361,372,376,387,391,396,410,414,418,427,431,436,441,454,458,463,470,474,478,489,516,520,525,542,547,560,575,592,596,615,622,692,735,739,740,743,754,767,773,801,805,891,895,951,957,961,970,1037,1041,1056,1060,1065,1088,1089,1105,1106,1110,1136,1140,1153,1157,1177,1181,1185,1190,1203,1207,1212,1237,1241,1253,1257,1295,1307,1311,1325,1329,1351,1355,1370,1374,1447,1481 'valuealign':790 'var':714,719,724,987,995,1002,1010 'vector':35,102,107,200,868,1245,1298,1469,1484 'vectorized-plots-io':106 'vertic':300 'via':382 'view':31,992,1007,1229 'viewport':1468 'visibl':785,1502 'visual':13,163 'voiceov':1342,1492 'vs':611 'wed':675 'week':625 'weight':432 'workflow':51,52,123 'wrap':155 'wrong':982,1023,1074,1123,1171,1224,1268,1301,1341 'x':236,258,286,303,317,323,339,371,386,409,426,453,469,515,734,766,800,828,890,904,907,908,914,917,919,925,926,937,956,958,959,1036,1055,1135,1152,1180,1182,1202,1204,1236,1238,1252,1254,1255,1306,1308,1309,1324,1326,1327,1350,1369 'xend':356 'xstart':352 'y':240,262,269,290,307,327,343,360,375,390,413,430,457,488,519,738,772,804,832,894,902,909,910,920,927,928,940,960,962,963,1040,1059,1139,1156,1184,1186,1206,1208,1240,1242,1256,1258,1259,1310,1312,1313,1328,1330,1331,1354,1373 'yend':477 'ystart':473 'zero':662,1119,1437 'zero-baselin':1118,1436","prices":[{"id":"e403b206-5083-42aa-8786-813602e12e40","listingId":"c3bc7475-fd7f-4947-9d42-a2f76a73915c","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"dpearson2699","category":"swift-ios-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T20:33:36.527Z"}],"sources":[{"listingId":"c3bc7475-fd7f-4947-9d42-a2f76a73915c","source":"github","sourceId":"dpearson2699/swift-ios-skills/swift-charts","sourceUrl":"https://github.com/dpearson2699/swift-ios-skills/tree/main/skills/swift-charts","isPrimary":false,"firstSeenAt":"2026-04-18T22:01:19.167Z","lastSeenAt":"2026-04-22T00:53:44.812Z"},{"listingId":"c3bc7475-fd7f-4947-9d42-a2f76a73915c","source":"skills_sh","sourceId":"dpearson2699/swift-ios-skills/swift-charts","sourceUrl":"https://skills.sh/dpearson2699/swift-ios-skills/swift-charts","isPrimary":true,"firstSeenAt":"2026-04-18T20:33:36.527Z","lastSeenAt":"2026-04-22T05:40:38.040Z"}],"details":{"listingId":"c3bc7475-fd7f-4947-9d42-a2f76a73915c","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"dpearson2699","slug":"swift-charts","source":"skills_sh","category":"swift-ios-skills","skills_sh_url":"https://skills.sh/dpearson2699/swift-ios-skills/swift-charts"},"updatedAt":"2026-04-22T05:40:38.040Z"}}