Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Swift Charts: Vectorized and function plots
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
yamakentoc
June 28, 2024
Programming
2.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Swift Charts: Vectorized and function plots
yamakentoc
June 28, 2024
More Decks by yamakentoc
See All by yamakentoc
WWDC25:デザインセッションまとめ
yamakentoc
1
150
Swift × Android : How Skip is Shaping the Future of Cross-Platform Development
yamakentoc
0
590
Skip:Native Swift on Androidを理解する
yamakentoc
0
210
マルチプラットフォーム系はSkipで良さそうな話.pdf
yamakentoc
2
620
Pathのあまり知られてない部分を知る
yamakentoc
1
120
WWDC創設期から現在まで
yamakentoc
0
120
Xcodeの意外と知られてない機能
yamakentoc
1
190
既存アプリをVisionOSでビルドするコツ.pdf
yamakentoc
1
610
ARKitのすヽめ
yamakentoc
0
530
Other Decks in Programming
See All in Programming
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
250
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
180
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
240
Apple Intelligenceとオンデバイス時代の到来
yahir0
0
140
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
150
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
240
sbt 2.0: takeoff
eed3si9n
0
170
JIS keyboard support in Omarchy
lef237
0
160
[2026-10-14](C)Re:ゼロから始める異世界生活〜始まりの終わりと終わりの始まり〜
tosite
0
160
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
130
AI時代のシニアエンジニアとは
yosuke_furukawa
PRO
11
9.2k
Featured
See All Featured
Technical Leadership for Architectural Decision Making
baasie
3
610
Large-scale JavaScript Application Architecture
addyosmani
516
110k
[SF Ruby Conf 2025] Rails X
palkan
3
1.5k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
How STYLIGHT went responsive
nonsquared
100
6.3k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
47k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
Transcript
ࢁޱݡొʢZBNBLFOʣ 4XJGU$IBSUT 7FDUPSJ[FEBOEGVODUJPOQMPUT
ࣗݾհ ໊લɿࢁޱݡొʢZBNBLFOʣ ॴଐɿ ͍ͬͯΔ͜ͱɿ 5XJUUFSɿ!ZBNBLFOUPD
͢༰ w 4XJGU$IBSUTͷΞοϓσʔτʹ͍ͭͯ w Ξοϓσʔτ༰͚ͩฉ͍ͯΑ͘Θ͔Βͳ͍ͱࢥ͏ͷͰɺ ͦͷલʹ4XJGU$IBSUTͷ͓͞Β͍ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
4XJGU$IBSUTͷ͓͞Β͍ w 88%$Ͱൃද͞ΕͨάϥϑඳըͷGSBNFXPSL w l.BSLzΛ֤ͬͯάϥϑΛඳըͰ͖Δ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNEFTJHOIVNBOJOUFSGBDFHVJEFMJOFTDIBSUT IUUQTEFWFMPQFSBQQMFDPNKQWJEFPTQMBZXXED
4XJGU$IBSUTͷ͓͞Β͍ w άϥϑΛඳը͍ͨ͠߹#BS.BSLΛ༻ w ͍ίʔυ͚ͩͰ؆୯ʹάϥϑΛඳըͰ͖Δ import SwiftUI import Charts struct
BarChartView: View { let dataList = [ (month: "Jan", value: 20), (month: "Feb", value: 60), (month: "Mar", value: 45) ] var body: some View { Chart(dataList, id: \.month) { BarMark( x: .value("Month", $0.month), y: .value("Value", $0.value) ) } } }
w ԁάϥϑ͕ඳըͰ͖ΔΑ͏ʹͳͬͨΓ 88%$Ͱʜ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNKQWJEFPTQMBZXXED
w ΑΓ؆୯ʹΠϯλϥΫςΟϒͳػೳ͕ՃͰ͖ΔΑ͏ʹͳͬͨΓ 88%$Ͱʜ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNKQWJEFPTQMBZXXED
w εΫϩʔϧՄೳʹͳͬͨΓ͠·ͨ͠ 88%$Ͱʜ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNKQWJEFPTQMBZXXED
88%$Ͱʜ w ͦͷଞʹ༷ʑͳΞοϓσʔτ͕ೖΓ·͕ͨ͠ɺ ৄࡉʮ4XJGU$IBSUT·ͱΊʯͱ͍͏ͷهࣄΛಡΜͰΈ͍ͯͩ͘͞ɻ Ҿ༻ݩɿIUUQTRJJUBDPNZBNBLFOUPDJUFNTBECDBG ͍͍Ͷ͍ͩ͘͞
88%$Ͱͷ4XJGU$IBSUTͷΞοϓσʔτ w ؔΛͬͯάϥϑΛඳըͰ͖ΔΑ͏ʹͳͬͨ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
88%$Ͱͷ4XJGU$IBSUTͷΞοϓσʔτ w ؔΛͬͯάϥϑΛඳըͰ͖ΔΑ͏ʹͳͬͨ w େنͳσʔλΛΑΓޮతʹॲཧͰ͖ΔΑ͏ʹͳͬͨ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
88%$Ͱͷ4XJGU$IBSUTͷΞοϓσʔτ w ؔΛͬͯάϥϑΛඳըͰ͖ΔΑ͏ʹͳͬͨ w େنͳσʔλΛΑΓޮతʹॲཧͰ͖ΔΑ͏ʹͳͬͨ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
ؔΛͬͯάϥϑΛඳըͰ͖ΔΑ͏ʹͳͬͨ w ࠓ·Ͱz.BSLzΛͬͯάϥϑΛඳը͍ͯͨ͠ʢ-JOF.BSL "SFB.BSL ʜʣ w ৽͘͠z1MPUzͱ͍͏ͷ͕ੜʢ-JOF1MPU "SFB1MPU ʜʣ w
1MPUΛ͏͜ͱͰؔΛͬͯάϥϑΛඳըՄೳʹ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
w ͭͷؔΛάϥϑʹඳըͰ͖Δ -JOF1MPU Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
w ྫ͑ʮ ʯΛඳը͍ͨ͠߹ y = x2 -JOF1MPU Chart { LinePlot(x:
"x", y: "y") { x in x * x // y=x^2 } } .chartXScale(domain: -5...5) // X࣠ͷൣғ .chartYScale(domain: -5...5) // Y࣠ͷൣғ ˞Πϝʔδ Ҿ༻ݩɿIUUQTXXXHFPHFCSBPSHHSBQIJOH MBOHKB
w ؔͷྖҬΛຒΊΔ͜ͱ͕Ͱ͖Δ "SFB1MPU Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
"SFB1MPU w ͭͷؔͷؒͷྖҬΛຒΊΔ͜ͱͰ͖Δ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
"SFB1MPU w ͱ ͷྖҬΛຒΊΔ߹ y = x + 1 y
= x2 Chart { AreaPlot(x: "x", yStart: "x + 1", yEnd: "x^2") { x in (yStart: x + 1, yEnd: x * x) } } .chartXScale(domain: -5...5) // X࣠ͷൣғ .chartYScale(domain: -5...5) // Y࣠ͷൣғ Ҿ༻ݩɿIUUQTXXXHFPHFCSBPSHHSBQIJOH MBOHKB ˞Πϝʔδ
άϥϑͷදࣔൣғΛઃఆ͢Δ w දࣔൣғΛઃఆ͢Δ߹DIBSU94DBMF EPNBJO Λ༻ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
άϥϑͷग़ྗൣғΛઃఆ͢Δ w ҾEPNBJOͰYͷൣғΛࢦఆ͢Δ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
,FZOPUFͰɺखॻ͖ͷܭࢉ͔ࣜΒάϥϑΛඳը͢Δγʔϯ͕͋ͬͨ $IBSUTͰؔΛάϥϑԽ͢ΔػೳΛ͍ͬͯΔ͜ͱ͕Θ͔Δ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
ύϥϝτϦοΫؔѻ͏͜ͱ͕Ͱ͖Δ w ύϥϝτϦοΫؔʢ1BSBNFUSJDGVODUJPOʣͱʜ w ಛఆͷύϥϝʔλʢྫ͑࣌ؒʣΛͬͯɺෳͷมʢҐஔͳͲʣΛಉ ࣌ʹදؔ͢ w ྫ͑ʮܘSͷԁʯҎԼͷΑ͏ʹදͤΔ x(t) =
r cos(t) y(t) = r sin(t)
ܘͷԁΛඳը͢Δ߹ w ܘͷԁΛදؔ͢ x(t) = 2 cos(t) y(t) = 2
sin(t) Chart { LinePlot(x: "x", y: "y", t: "t", domain: -.pi ... .pi) { t in let x = 2 * cos(t) let y = 2 * sin(t) return (x, y) } } .chartXScale(domain: -5...5) .chartYScale(domain: -5...5) ˞Πϝʔδ Ҿ༻ݩɿIUUQTXXXHFPHFCSBPSHHSBQIJOH MBOHKB
ϋʔτΛඳը͢Δ߹ x(t) = 2 sin3(t) y(t) = cos(t)(2 − cos(t)
− cos2(t)) Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
۠ؔѻ͏͜ͱ͕Ͱ͖Δ w ۠ؔʢ1JFDFXJTFGVODUJPOʣͱʜ w ۠͝ͱʹҟͳΔؔΛద༻͢Δؔ f(x) = { x2 JG
x > 0 −x2 JG x ≤ 0 Chart { LinePlot(x: "x", y: "y") { x in if x > 0 { x * x // y=x^2 } else { -x * x // y=-x^2 } } } .chartXScale(domain: -5...5) .chartYScale(domain: -5...5) Ҿ༻ݩɿIUUQTXXXHFPHFCSBPSHHSBQIJOH MBOHKB ˞Πϝʔδ
۠ؔͰग़ྗ͕ͳ͍߹ w ۠ʹΑͬͯ6OEF fi OFEͷ͜ͱ͋Δ w OBOΛࢦఆ͢Δ͜ͱͰग़ྗ͕ͳ͍͜ͱΛ௨ f(x) =
{ x2 JG x > 0 6OEF fi OFE JG x ≤ 0 Chart { LinePlot(x: "x", y: "y") { x in if x > 0 { x * x // y=x^2 } else { .nan // ग़ྗ͕ͳ͍͜ͱΛ௨ } } } .chartXScale(domain: -5...5) .chartYScale(domain: -5...5) ˞Πϝʔδ Ҿ༻ݩɿIUUQTXXXHFPHFCSBPSHHSBQIJOH MBOHKB
w ྫ͑ҎԼͷؔͷ߹ɺYʹͳΔͱʮ ʯͱͳΓɺΤϥʔʹͳΔͷͰආ͚ Δඞཁ͕͋Δɻ͜ͷ߹OBOΛࢦఆ͢Δ͜ͱͰճආ͢Δ͜ͱ͕Ͱ͖Δ 1 0 ۠ؔͰग़ྗ͕ͳ͍߹ y = {
6OEF fi OFE JG x = 0 1 x JG x ≠ 0 Chart { LinePlot(x: "x", y: "y") { x in if x != 0 { 1 / x } else { .nan // ग़ྗ͕ͳ͍͜ͱΛ௨ } } } .chartXScale(domain: -5...5) .chartYScale(domain: -5...5) ˞Πϝʔδ Ҿ༻ݩɿIUUQTXXXHFPHFCSBPSHHSBQIJOH MBOHKB
88%$Ͱͷ4XJGU$IBSUTͷΞοϓσʔτ w ؔΛͬͯάϥϑΛඳըͰ͖ΔΑ͏ʹͳͬͨ w େنͳσʔλΛΑΓޮతʹॲཧͰ͖ΔΑ͏ʹͳͬͨ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
େنͳσʔλΛΑΓޮతʹॲཧͰ͖ΔΑ͏ʹͳͬͨ w 1MPU-JOF1MPU "SFB1MPUҎ֎ʹɺશͯͷ.BSLʹରͯ͠1MPU͕Ճ͞Εͨ w ͜ΕΒͷ1MPUΛ͏͜ͱͰɺίϨΫγϣϯશମΛฒྻʹѻ͏͜ͱ͕Ͱ͖ɺ େنͳσʔλޮతʹॲཧͰ͖ΔΑ͏ʹͳͬͨ w ͓ͦΒ͘.BSLͩͱσʔλྻͰѻΘΕ͍ͯͨ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
#BS.BSLͷఆٛํ๏ let dataList = [ (month: "Jan", value: 20), (month:
"Feb", value: 60), (month: "Mar", value: 45) ] … Chart(dataList, id: \.month) { BarMark( x: .value("Month", $0.month), y: .value("Value", $0.value) ) } w %BUBΛ$IBSUʹ͠ɺWBMVFͷΑ͏ʹΛࢦఆ͍ͯͨ͠
#BS1MPUͷఆٛํ๏ w %BUBΛ#BS1MPUͷҾʹ͠ɺ,FZ1BUIͰΛࢦఆՄೳʹͳͬͨ let dataList = [ (month: "Jan", value:
20), (month: "Feb", value: 60), (month: "Mar", value: 45) ] … Chart(dataList, id: \.month) { BarMark( x: .value("Month", $0.month), y: .value("Value", $0.value) ) } let dataList = [ (month: "Jan", value: 20), (month: "Feb", value: 60), (month: "Mar", value: 45) ] … Chart { BarPlot( dataList, x: .value("Month", \.month), y: .value("Value", \.value) ) }
ηογϣϯͰ͜Μͳදݱ w ӈਤΞϝϦΧͷιʔϥʔύωϧͷઃஔҐஔΛࣔͨ͠ͷ w ઃஔҐஔΛҢܦ͔Β1PJOU1MPUͰඳը w ਤࣗମ-JOF1MPUͰඳը w 4XJGU$IBSUT͕͋ΕԿͰඳ͚Δʜ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPODIBSUTDSFBUJOHBEBUBWJTVBMJ[BUJPOEBTICPBSEXJUITXJGUDIBSUT
1MPUͱ.BSLͷͲͪΒΛ͏͖͔ʁ w େنͳσʔληοτ͔ͭɺάϥϑશମ ͷݟ͕ͨγϯϓϧͳΧελϚΠζͷ ߹ʹ1MPUΛ͏͖ w σʔλগͳ͍͕ɺσʔλϙΠϯτ͝ͱ ʹݟͨͷΧελϚΠζΛ͢Δ߹ɺ [*OEFYΛͬͯෳࡶͳ֊Խ͕ඞཁͳ ߹.BSLΛ͏
1MPU .BSL Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
1MPUͷύϑΥʔϚϯεΛ্͛Δํ๏ w ༻͢ΔελΠϧ͝ͱʹσʔλͷίϨΫγϣϯΛάϧʔϓԽ͢Δ͜ͱͰɺ 4XJGU$IBSUT͕ελΠϧͷมߋճΛݮΒ͢͜ͱ͕Ͱ͖Δ w 1MPUͰDPNQVUFEϓϩύςΟͷར༻Λආ͚ɺ4UPSFEϓϩύςΟʹ͢Δ͜ͱ ͰϨϯμϦϯάॲཧΛܰݮͰ͖Δ w άϥϑͷදࣔ͢Δൣғ EPNBJO
Λ༧Ίࢦఆ͢Δ͜ͱͰΑΓޮతʹඳը͞Ε Δ w Ұ෦ͷελΠϧͷΧελϚΠζɺେྔͷσʔλϙΠϯτͰཱͨͳ͘ͳΔ ͷ͕ҰൠతͳͷͰɺελΠϧͷΧελϚΠζΛ͠ͳ͍ํ͕ɺάϥϑͷύϑΥʔ ϚϯεΛ্ͤ͞Δ͜ͱ͕Ͱ͖Δ
αϯϓϧ͋Δ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPODIBSUTDSFBUJOHBEBUBWJTVBMJ[BUJPOEBTICPBSEXJUITXJGUDIBSUT
·ͱΊ w ؔΛͬͯάϥϑΛඳըͰ͖ΔΑ͏ʹͳͬͨ w -JOF1MPUɿͭͷؔΛඳըͰ͖Δ w "SFB1MPUɿͭͷؔͷؒΛຒΊΔ͜ͱ͕Ͱ͖Δ w ύϥϝτϦοΫؔ۠ؔ༻Ͱ͖Δ w
େنͳσʔλΛΑΓޮతʹॲཧͰ͖ΔΑ͏ʹͳͬͨ w 1MPUΛ͏͜ͱͰฒྻʹσʔλΛॲཧͰ͖Δ w 1MPUͰ,FZ1BUIͰΛࢦఆͰ͖Δ w 1MPUͷύϑΥʔϚϯεΛ্͛Δํ๏͕͋Δ
ࢀߟࢿྉ w IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPODIBSUTDSFBUJOHBEBUB WJTVBMJ[BUJPOEBTICPBSEXJUITXJGUDIBSUT w IUUQTRJJUBDPNZBNBLFOUPDJUFNTBECDBG