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
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
110
WWDC創設期から現在まで
yamakentoc
0
120
Xcodeの意外と知られてない機能
yamakentoc
1
190
既存アプリをVisionOSでビルドするコツ.pdf
yamakentoc
1
600
ARKitのすヽめ
yamakentoc
0
530
Other Decks in Programming
See All in Programming
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.1k
Workers Cache を知る
syumai
0
350
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
170
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
350
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
130
sbt 2.0: takeoff
eed3si9n
0
110
Java 27新機能 / Java 27 new features
kishida
2
210
mrbgem 三角測量 開発
ogom
0
220
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
130
Simple Storage Service(S3) is not simple
iwatsukayura
0
240
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
200
Featured
See All Featured
Unsuck your backbone
ammeep
672
58k
Leo the Paperboy
mayatellez
10
2.4k
Mind Mapping
helmedeiros
1
400
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
Building AI with AI
inesmontani
PRO
1
1.3k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
790
Code Reviewing Like a Champion
maltzj
529
40k
[SF Ruby Conf 2025] Rails X
palkan
3
1.4k
Making the Leap to Tech Lead
cromwellryan
135
10k
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