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.2k
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
610
Pathのあまり知られてない部分を知る
yamakentoc
1
110
WWDC創設期から現在まで
yamakentoc
0
110
Xcodeの意外と知られてない機能
yamakentoc
1
190
既存アプリをVisionOSでビルドするコツ.pdf
yamakentoc
1
600
ARKitのすヽめ
yamakentoc
0
520
Other Decks in Programming
See All in Programming
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
230
FreeBSDでZabbixを動かす
kenkino
0
340
MCP Appsでつくるチャット駆動な地図アプリ
nakamori1024
0
110
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
370
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
500
難しいけど、読めた。- OSSの入口に立った話。
sts11142
0
130
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
180
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
220
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
550
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
1
2k
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
3
390
Featured
See All Featured
The SEO identity crisis: Don't let AI make you average
varn
0
560
Docker and Python
trallard
47
4.2k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
500
A Soul's Torment
seathinner
8
3.7k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Music & Morning Musume
bryan
48
7.4k
Chasing Engaging Ingredients in Design
codingconduct
0
340
Believing is Seeing
oripsolob
1
230
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
590
Building the Perfect Custom Keyboard
takai
2
890
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
2k
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