Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
data visualization @html5study
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
muddydixon
March 28, 2023
Programming
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
data visualization @html5study
muddydixon
March 28, 2023
More Decks by muddydixon
See All by muddydixon
企業と勉強会
muddydixon
0
99
basic of data visualization and d3.js demonstration
muddydixon
0
140
study before deeplearning @YAPC2015
muddydixon
0
140
d3.js demonstration
muddydixon
0
100
Time Series Prediction@JubatusCasualTalk2
muddydixon
0
92
Perl for Visualization@YAPC2013
muddydixon
0
120
Time Series Analysis by JavaScript @LLMatsuri2013
muddydixon
0
140
How to create my own Hadoop MultipleInput@HadoopCodeReading8
muddydixon
0
93
BigDataAnalytics beginning by mongo-hadoop@MongoTokyo2012
muddydixon
0
70
Other Decks in Programming
See All in Programming
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
190
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
570
霧の中の代数的エフェクト
funnyycat
1
290
えっ!!コードを読まずに開発を!?
hananouchi
0
110
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
360
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
240
Vite+ Unified Toolchain for the Web
naokihaba
0
710
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
430
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
250
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
7.3k
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
180
Featured
See All Featured
Evolving SEO for Evolving Search Engines
ryanjones
0
240
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Rails Girls Zürich Keynote
gr2m
96
14k
From π to Pie charts
rasagy
0
230
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
890
Producing Creativity
orderedlist
PRO
348
40k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Color Theory Basics | Prateek | Gurzu
gurzu
0
380
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
650
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
300
Transcript
σʔλՄࢹԽ ʹ͍ͭͯ )5.-ͱ͔ษڧձ !NVEEZEJYPO
!NVEEZEJYPO "NVEEZEJYPO #NVEEZEJYPO ! /PEFKT 1FSM 7JTVBMJ[BUJPO 5JNF4FSJFT /FVSBM/FUXPSL ࢲJT
ΞδΣϯμ σʔλՄࢹԽͷత σʔλՄࢹԽͱ σʔλՄࢹԽͷཧ۶ 8FCͰͷσʔλՄࢹԽͷ͍͍ͱ͜Ζ %KTͱ
ՄࢹԽͷత
σʔλՄࢹԽͱ The main goal of data visualization is its ability
to visualize data, communicating information clearly and effectivelty. Vitaly Friedman $ σʔλՄࢹԽͷతɺσʔλΛՄࢹԽ͠ɺ ใΛ໌͔֬ͭޮతʹ͑Δ͜ͱͰ͋Δ $
ՄࢹԽͷత ͑ͯͲ͏͢Δʁ
ՄࢹԽͷత ☓ՄࢹԽͷͨΊͷՄࢹԽ ̋తୡͷͨΊͷՄࢹԽ
ՄࢹԽͷత ☓ʮͲ͏ՄࢹԽ͢Δ͔ʁʯ ̋ʮԿΛՄࢹԽ͢Δ͔ʁʯ ˕ʮͳΜͷͨΊʹՄࢹԽ͢Δ͔ʁʯ
ՄࢹԽͷత ϝτϦΫεͷࢹ ྫ ϞχλϦϯάπʔϧ τϨϯυͷѲ ྫ גࣜνϟʔτ ؔੑͷѲ ྫ ιʔγϟϧάϥϑ
ଐੑͷੳ ྫ ސ٬ଐੑͷׂ߹ചΕےδϟϯϧͷׂ߹
ՄࢹԽͷత ࣄ࣮Λൃ۷Ͱ͖ͯͦ͜ͷՄࢹԽ ࣄ࣮Λ׆༻Ͱ͖ͯͦ͜ͷՄࢹԽ ! վળߦҝͷଅਐͷͨΊͷՄࢹԽ Ϗδωεɺ࣏ɺՈܭͳͲ
తΛ્͢ΔՄࢹԽ
μϝͳՄࢹԽ ޮత͡Όͳ͍ ໌֬͡Όͳ͍ ! ˞ʮιΛ͘ʯʮαϯϓϧʹ͕͋Δʯ ͱ͔ͪΐͬͱ͓͍͓͖ͯ·͢
໌֬͡Όͳ͍
໌֬͡Όͳ͍
໌֬͡Όͳ͍
໌֬͡Όͳ͍
໌֬͡Όͳ͍
໌֬͡Όͳ͍
໌֬͡Όͳ͍
ޮత͡Όͳ͍
͍Ζ͍Ζ
ͬͱཉ͍͠ਓͪ͜Βʹ IUUQXUGWJ[OFU
σʔλՄࢹԽͱ
σʔλՄࢹԽͱ The main goal of data visualization is its ability
to visualize data, communicating information clearly and effectivelty. Vitaly Friedman $ σʔλՄࢹԽͷతɺσʔλΛՄࢹԽ͠ɺ ใΛ໌͔֬ͭޮతʹ͑Δ͜ͱͰ͋Δ $
ͭ·Γ % ใΛ͑ͦͼΕ͍ͯΔՄࢹԽ % ໌֬Ͱͳ͍ՄࢹԽ % ޮతͰͳ͍ՄࢹԽ ! ্هʮՄࢹԽʯͰ͋Γ·ͤΜ
ՄࢹԽͷఆٛʹଇΔͱ ใ͕ࢹ֮తͳදݱʹஔ͖͑ΒΕ͍ͯΔ ใ͕໌֬ʹ͑ΒΕ͍ͯΔ ใ͕ޮతʹ͑ΒΕ͍ͯΔ & ' ( )
ͳͥՄࢹԽ͢ΔͱΑ͍͔
ͳͥՄࢹԽ͢ΔͱΑ͍͔
ͳͥՄࢹԽ͢ΔͱΑ͍͔
ͳͥՄࢹԽ͢ΔͱΑ͍͔
ͳͥՄࢹԽ͢ΔͱΑ͍͔
ͳͥՄࢹԽ͢ΔͱΑ͍͔
ͳͥՄࢹԽ͢ΔͱΑ͍͔ ͷେখɹɹ▶ߴ͞ͷେখ ͷେখɹɹ▶໘ੵͷେখ ্ঢɹɹ▶ӈ্͕Γͷ͖ Լ߱ɹɹ▶ӈԼ͕Γͷ͖ ಉ͡ΧςΰϦ▶ಉ͡৭ ؔੑ
▶ີू
ͳͥՄࢹԽ͢ΔͱΑ͍͔ ܦݧతɾೝతͳ طଘࣝΛޮతʹ ར༻ͨ͠ཧղͷଅਐ & ' ( )
ͳͥՄࢹԽ͢ΔͱΑ͍͔ ͙͔͢ΔJTਖ਼ٛ & ' ( )
ೝػೳɾܦݧΛϑϧʹ͏ 4FQBM-FOHU 4FQBM8JEU 1FUBM-FOHU 1FUBM8JEUI 4QFDJFT
TFUPTB TFUPTB TFUPTB TFUPTB TFUPTB WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB ΈΜͳ͍͖ͩ͢JSJT
͔͜͜Βͳʹ͔ Θ͔ΔΘ͚Ͱ ͳ͍Ͱ͢ΑͶʁ
౷ܭྔͰදݱ 4FQBM -FOHUI 4FQBM 8JEUI 1FUBM -FOHUI 1FUBM 8JEUI .JO
TU 2V .FEJBO .FBO SE 2V .BY
͜ΕͳΒ ͳΜͱ͔
ਤܗͷܦݧɾೝೳྗΛར༻
ਤܗͷܦݧɾೝೳྗΛར༻ w ͷ෯͕͍ w தԝ্͕ʹภ͍ͬͯΔ w େ͖ͭ͘ͷๆ͕͋Δ w தԝ͕एׯɺ্ ʹภΓ
w ๆ͕ͭɾɾɾʁ w ۉʹ w தԝ͕͓͓Α ͦத৺ w ଞͷଐੑͱൺֱͯ͠ ͷ෯͕খ͍͞ w ֎Ε͕ͪΒ΄Β
ʮೝʯ͕ʮѲʯΛՃ 4FQBM -FOHUI 4FQBM 8JEUI 1FUBM -FOHUI 1FUBM 8JEUI .JO
TU 2V .FEJBO .FBO SE 2V .BY
ͦͷଞʹ ശͻ͛ਤͷΘΓʹ ώετάϥϜ ώετάϥϜΛछผຖʹ දݱ
ՄࢹԽͷཧ
σʔληοτͱՄࢹԽ ΨΫย෯ Ֆห෯ 4QFDJFT TFUPTB
TFUPTB TFUPTB TFUPTB TFUPTB WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB
ՄࢹԽͰҙࣝ͢Δ֓೦ σʔλ σʔλม ࢹ֮ม ࢹ֮ه߸ ՄࢹԽ σʔληοτ ༷ʑͳϑΟʔϧυͷ͔ΒͳΔ ϨίʔυΛෳؚΉσʔλ܈ มநग़ɾॲཧɾ
ईԽॲɾཧ౷ܭॲཧ͕ࡁΜͩͷ ՄࢹԽରͱ͢ΔϑΟʔϧυΛ ؚΉσʔλɻͻͱͭͻͱ͕ͭҙຯΛ ࣋ͬͨ୯Ґ ྫɿ42-ͷߦ ϑΟʔϧυͷͦͷͷ ϝδϟʔ ΧςΰϦม σΟ ϝϯδϣϯ ɻͻͱͭͻͱ͕ͭࢹ֮ม ʹஔ͞ΕΔ ࢹ֮දݱͻͱͭͻͱͭΛࢦ͢ ҐஔαΠζɺ৭ɺ͖ɺڧ ಁ໌ ɾ࠼ɾ໌ ɺςΫενϟͳͲ ࢹ֮มΛूͤͨ͞ه߸ ԁɺۣܗɺހɺཱମͳͲ σʔληοτͷσʔλʹରԠ͢Δ ه߸ͷू߹ʹΑΔՄࢹԽ ରԠ ରԠ ରԠ
σʔληοτͱՄࢹԽ ΨΫย෯ Ֆห෯ 4QFDJFT TFUPTB
TFUPTB TFUPTB TFUPTB TFUPTB WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB σʔλ ࢹ֮ه߸
σʔληοτͱՄࢹԽ ΨΫย෯ Ֆห෯ 4QFDJFT TFUPTB
TFUPTB TFUPTB TFUPTB TFUPTB WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB σʔλม : ࢹ֮ม 9 ৭
ՄࢹԽͷ֓೦ ཧ۶্ 4FQBM-FOHU I 4FQBM8JEUI 1FUBM-FOHUI 1FUBM8JEUI 4QFDJFT
TFUPTB TFUPTB TFUPTB TFUPTB TFUPTB WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS ย Ֆห छผ TFUPTB ย ൺྫई Ֆห ൺྫई छผ TFUPTB ໊ٛई ย ൺྫई Ґஔ Ֆห ൺྫई Ґஔ छผ ໊ٛई ৭ 4FQBM-FOHUI 1FUBM-FOHUI 4QFDJFT TFUPTB TFUPTB TFUPTB TFUPTB TFUPTB WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS ย Ֆห छผ σʔληοτ σʔληοτ มநग़ σʔλ σʔλม ࢹ֮ม ࢹ֮ه߸ ՄࢹԽ ରԠ ରԠ ରԠ
σʔλมࢹ֮ม ย෯ɿY࠲ඪɺՖห෯ɿZ࠲ඪɺछผɿ৭ ͱͭͷσʔλมɿࢹ֮มΛରԠ
σʔλมࢹ֮ม ࢄਤͩͱͭ͘Β͍ͷมදݱՄೳ ˞ͨͩ͠ɺTFUPTBͷಁ໌͕ߴ͘ࢹೝੑ͕͍ͷͰɾɾɾ
σʔλมࢹ֮ม ࢄਤͩͱͭ͘Β͍ͷมදݱՄೳ ˞ͨͩ͠ɺTFUPTBͷಁ໌͕ߴ͘ࢹೝੑ͕͍ͷͰɾɾɾ σʔλมͷʮʯͱʮ໘ ੵʯΛରԠ͚Δʂʂ ʮܘʯΛରԠ͚ͯ͠· ͏ͱ໘ੵࣗ͞ΕΔʂ
ࢹ֮มͷಛੑ બੑɿ৭ɺํͳͲ ࢹ֮ม͕ҟͳΔ߹ɺหผ͕Մೳ ؔ࿈ੑɿ৭ɺܗঢ়ͳͲ ࢹ֮ม͕ҟͳΔ߹ɺಉҰάϧʔϓͷೝ͕ࣝՄೳ ఆྔੑɿαΠζɺҐஔͳͲ ࢹ֮ม͕ҟͳΔ߹ɺͭͷࠩΛࣝผ͢Δ͜ͱ͕Մೳ ॱংੑɿڧ͞ ಁ໌ɺ࠼ ͳͲ
ࢹ֮ม͕ҟͳΔ߹ɺॱংͷେখΛࣝผ͢Δ͜ͱ͕ Մೳ
σʔλมͷई ໊ٛईɿΧςΰϦɺ໊শͳͲ ಉ͔ͦ͡ΕҎ֎͔ͷൺֱ͔͠Ͱ͖ͳ͍ ॱংईɿెڝͷॱҐɺͷΞϯέʔτͳͲ ಉ͔͡Ͳ͏͔ɾେখൺֱͰ͖Δ͕ɺՃݮͳͲ ͷԋࢉͰ͖ͳ͍ ࠩईɿͳͲ ࠩͷൺֱͰ͖Δ͕ɺθϩ͕ͳ͘ൺͷҙຯ͕ແ͍ ൺྫईɿਓɺճɺܦաඵͳͲ θϩ͕͋Γɺࠩͷൺֱɺൺͷൺֱ͕Մೳ
ࢹ֮มͷಛੑ ͜Εܝࡌ͢ΕΑ͔ͬͨͱল͍ͯ͠·͢ %FTJHOJOH%BUB7JTVBMJ[BUJPOT 0`3&*--:
ࢹ֮มͷಛੑ ਪ ͜Εܝࡌ͢ΕΑ͔ͬͨͱল͍ͯ͠·͢ %FTJHOJOH%BUB7JTVBMJ[BUJPOT 0`3&*--: ΧςΰϦΛࣔ͢ͳΒҰ ΧςΰϦΛࣔ͢ͳΒҰ ςΫενϟܥਤ͕ࡶʹ ͳΓ͍͢
8FCͰͷՄࢹԽͷ͍͍ͱ͜Ζ
ར 8FCͰڞ༗͠ɺଟ͘ͷਓʹσʔλʹؚ·Ε Δࣄ࣮Λಧ͚Δ͜ͱ͕Ͱ͖Δ ੫ۚͲ͜ʹߦͬͨʁ ϚεΩʔϘʔυʹΑΔΠϯλϥΫγϣ ϯ͕ར༻Ͱ͖Δ Ξχϝʔγϣϯ͕ར༻Ͱ͖Δ ࣌ؒ࣠Λ࣮ࡍͷ࣌ؒʹׂΓͯΔ͜ͱͰɺද ݱͰ͖ΔσʔλมΛͭ૿͢͜ͱ͕Ͱ͖Δ
8FCͰͷڞ༗ IUUQTQFOEJOHKQ
ΠϯλϥΫγϣϯ IUUQTRVBSFHJUIVCJPDSPTTpMUFS IUUQXXXDTVNEFEV dCFEFSTPOQBQFSTJOEFYIUNM
Ξχϝʔγϣϯ IUUQTXXXZPVUVCFDPNXBUDI WF[7LBI3'UNT
47(ʹ͍ͭͯ
47(ͱ 4DBMBCMF7FDUPS(SBQIJDT େ͖ͯ͘͠៉ྷ 9.-%PDVNFOU %0. *OTQFDUPSͰݟ͍͢
47(Ͱ͑Δλά TWH H EFGT TZNCPM VTF QBUI MJOF SFDU DJSDMF
FMMJQTF QPMZMJOF QPMZHPO ! ͋ͱϑΟϧλʔपΓ͕ͨ͘͞Μ͋Γ·͕͢ ΄ͱΜͲ͏ػձ͋Γ·ͤΜ
47(͜Μͳײ͡ <svg width="400" height="300">! <g transform="translate(50,50)">! <circle r="5" cx="128.571" cy="111.733"
fill="blue"></circle>! <circle r="5" cx="21.428" cy="121.600" fill="red"></circle>! <circle r="5" cx="77.142" cy="138.4" fill="blue"></circle>! <circle r="5" cx="111.428" cy="135.2" fill="blue"></circle>! <circle r="5" cx="300" cy="0" fill="red"></circle>! <circle r="5" cx="0" cy="73.066" fill="red"></circle>! <circle r="5" cx="244.285" cy="192.266" fill="blue"></circle>! <circle r="5" cx="270" cy="200" fill="red"></circle>! <circle r="5" cx="51.428" cy="173.333" fill="red"></circle>! </g>! </svg>
47(ʹ͍ͭͯͪ͜ΒΛ IUUQXXXTMJEFTIBSFOFULBEPQQFJOMJOFTWH IUUQXXXTMJEFTIBSFOFUTTVTFSEDTWH NBOJBYDTTOJUFBGUFSEBSLTWHNBUTVEB
%KT
%KTͱ 63- IUUQEKTPSH %BUB%SJWFO%PDVNFOUT EBUBʹج͍ͮͯIUNMTWHEPDVNFOU PCKFDUͷॲཧΛߦ͏ɺͱ͍͏ίϯηϓτ 47(ૢ࡞ ॲཧ ՄࢹԽϢʔςΟϦςΟ
ͷ૯߹+BWB4DSJQUϥΠϒϥϦ 47(TFMFDUPSBUUSTUZMF ॲཧTDBMFOFTUBSSBZNBUI ՄࢹԽϢʔςΟϦςΟTDBMFBYJTMBZPVU
۩ମྫ <!doctype html>! <html lang="ja">! <head>! <meta charset="utf8">! <title>d3 introduction</title>!
<style>! .axis line, .axis path { fill: none; stroke: grey; }! </style>! </head>! <body>! ! <div>! <p>0th paragraph</p>! <p>1st paragraph</p>! <p>2nd paragraph</p>! </div>! ! <script type="text/javascript" charset="utf8" src="../components/d3/d3.min.js"></script>! <script type="text/javascript" charset="utf8" src="./introduction.js"></script>! </body>! </html>
۩ମྫ ଐੑελΠϧૢ࡞ var paragraphs = d3.select('body').selectAll('p');! paragraphs.style({background: 'cyan'});
۩ମྫ ଐੑελΠϧૢ࡞ var paragraphs = d3.select('body').selectAll('p');! var pdata = [!
{text: "modified: 0th paragraph"},! {text: "modified: 1th paragraph"},! {text: "modified: 2th paragraph"}! ];! paragraphs.data(pdata).text(function(d){ return d.text; }); EBUB ͰσʔλΛඥ͚Δ ͻͱͭͷQʹରͯ͠ɺͻͱͭͷ σʔλ BUUS UFYU TUZMF ͳͲҾʹඥ͚ΒΕͨσʔλΛ औΓɺͦΕʹԠͨ͡ॲཧΛߦ͏
۩ମྫ σʔλʹجͮ͘Ճ var pdata = d3.range(0, 5)! .map(function(id){! return {!
id: id,! text: id + "th paragraph"! };! });! ! paragraphs.data(pdata).enter()! .append('p')! .text(function(d){! return d.text;! }); ૿͑ͨʂ
۩ମྫ σʔλʹجͮ͘Ճ Ͱ͔ͭ͠૿͑ͯͳ͍ʂ σʔλͷ͞ QEBUBMFOHUI ͳ͔ͥʁ طଘͷQ ࠩ⾣͜Ε͕૿͑ͨʂ
σʔλ
var pdata = d3.range(0, 5)! .map(function(id){! return {! id: id,!
text: id + "th paragraph"! };! });! ! paragraphs.data(pdata).enter()! .append('p')! .text(function(d){! return d.text;! }); ۩ମྫ σʔλʹجͮ͘Ճ FOUFS ʹΑͬͯɺσʔλ%0.Λॲཧͷରʹ͢Δ
۩ମྫ σʔλʹجͮ͘আ var lessData = pdata.slice(0, 2);! paragraphs.data(lessData).exit().remove(); ʮEBUB FYJU
ʯ FYJU ʹΑͬͯɺ%0.σʔλΛॲཧͷରʹ͢Δ σʔλ ࠩ⾣͜Ε͕SFNPWF ͨ͠ طଘͷQ
4FMFDUJPO TFMFDU TFMFDU"MM Ͱऔಘͨ͠%0. BQQFOE ʹΑͬͯՃͨ͠%0.Λ TFMFDUJPOͱ͍͍·͢ EBUB ʹΑΓσʔλΛඥ͚Δ͜ͱ͕Ͱ͖ ·͢
BUUS TUZMF UFYU ͳͲͰඥ͚ ΒΕͨσʔλΛར༻ͯ͠%0.Λॲཧ͢Δ͜ ͱ͕Ͱ͖·͢
%BUB %SJWFO %PDVNFOUT
4FMFDUJPO ඥ͚ͨσʔλ طଘͷ%0. FYJU TFMFDUJPO FOUFS
4FMFDUJPO ྫ͑ ඥ͚ͨσʔλ طଘͷ%0. FYJU TFMFDUJPO FOUFS ଐੑɾελΠϧɾςΩ ετͷมߋͳͲΛߦ͏ ৽نʹ%0.ΛՃ
͠ɺಉ࣌ʹଐੑɾελ ΠϧɾςΩετΛηο τ͢Δ طଘͷ%0.Λআ͠ ͨΓɺಁ໌Λ্͛ͨ ΓΛߦ͏
࡞͢Δͱ͖ͷίπ 47(جຊ ޙʹՃͨ͠ͷ্͕ʹදࣔ͞ΕΔ -BZFS Hλά Λ੍ͬͯޚ͢Δͱ͏·͘ ॻ͚·͢ USBOTGPSNଐੑΛ͏·͘͏ͱָͰ͢ UFYUपΓ͍͠Ͱ͢ LBEPQQF͞Μ
ݴͬͯ·͢
None
<svg width="500" height="500">! <g width="480" height="480" transform="translate(10,10)">! <g class="background-layer">! <g
class="ruler">! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="0" y2="0"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="48" y2="48"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="96" y2="96"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="144" y2="144"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="192" y2="192"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="240" y2="240"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="288" y2="288"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="336" y2="336"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="384" y2="384"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="432" y2="432"></line>! </g>! </g>! <g class="chart-layer">! <g><rect x="10" width="100" height="22" y="458" fill="#1f77b4"></rect></g>! <g><rect x="170" width="100" height="209" y="271" fill="#ff7f0e"></rect></g>! <g><rect x="330" width="100" height="478" y="2" fill="#2ca02c"></rect></g>! </g>! <g class="info-layer"></g>! </g>! </svg>
·ͱΊ
σʔλՄࢹԽͱ The main goal of data visualization is its ability
to visualize data, communicating information clearly and effectivelty. Vitaly Friedman $ σʔλՄࢹԽͷతɺσʔλΛՄࢹԽ͠ɺ ใΛ໌͔֬ͭޮతʹ͑Δ͜ͱͰ͋Δ $
ՄࢹԽ͕Ռׂ͖ͨ͢ ࢹ֮දݱͱ͍͏ʮܦݧతʯʮೝతʯʹཧղ Λαϙʔτ͢Δදݱʹม͢Δͷ͕ՄࢹԽ σʔλΛه߸ʹɺσʔληοτΛՄࢹԽʹม ͢Δ ʮΑ͘ΘΕΔՄࢹԽʯͦΕ͚ͩͰཧղ͕ ਐΉՄࢹԽ ཧղ્͕·ΕͨΒɺͦΕ͢ͰʹՄࢹԽ͡Ό ͳ͍ʂ
ՄࢹԽͷత ☓ʮͲ͏ՄࢹԽ͢Δ͔ʁʯ ̋ʮԿΛՄࢹԽ͢Δ͔ʁʯ ˕ʮͳΜͷͨΊʹՄࢹԽ͢Δ͔ʁʯ
ՄࢹԽͷత ࣄ࣮Λൃ۷Ͱ͖ͯͦ͜ͷՄࢹԽ ࣄ࣮Λ׆༻Ͱ͖ͯͦ͜ͷՄࢹԽ ! վળߦҝͷଅਐͷͨΊͷՄࢹԽ Ϗδωεɺ࣏ɺՈܭͳͲ
σʔλՄࢹԽͷϚϯτϥ Overview First, Zoom and Filter, Then Details-on-Demand Overview First,
Zoom and Filter, Then Details-on-Demand Overview First, Zoom and Filter, Then Details-on-Demand Ben Shneiderman $
͕࣌ؒ͋ͬͨΒ
࡞ͬͯΈΑ͏ʂ ยΛߴ͞ͱ͢Δάϥϑ
༻ҙ͢Δͷ ίʔυ IUUQTHJTUHJUIVCDPN NVEEZEJYPO 8FCαʔό IUUQCMPHLBNJQPOFUFOUSZ ͖ͳαʔόΛ্ཱ͍ͪ͛ͯͩ͘͞
IUNM <!doctype html>! <html lang="ja">! <head>! <meta charset="utf8">! <title>d3 scatter
plog</title>! <style>! .axis line, .axis path { fill: none; stroke: grey; }! </style>! </head>! <body>! <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>! <script type="text/javascript" charset="utf8" src="./iris.js"></script>! </body>! </html>
+BWB4DSJQUσʔλͷಡΈࠐΈ var WIDTH = 500, HEIGHT = 500, margin =
50;! var width = WIDTH - 2 * margin, height = HEIGHT - 2 * margin;! var key = 'Sepal.Length';! ! // iris.csv ϑΝΠϧΛಡΈࠐΉ! d3.csv(! "./iris.csv",! // ߦͷܕΛमਖ਼! function(d){! for(var attr in d){! if(! isNaN(Number(d[attr]))){! d[attr] = +d[attr];! }! return d;! }! },! // σʔλΛऔಘ! function(err, data){!
+BWB4DSJQU47(ཁૉͷ࡞ // σʔλΛऔಘ! function(err, data){! ! // svgཁૉΛՃ! var svg
= d3.select('body').append('svg').attr({! width: WIDTH,! height: HEIGHT! });! // ϚʔδϯΛ֬อͯ͠ɺ࣠ͳͲΛදࣔͰ͖ΔΑ͏ʹ͢Δ! var main = svg.append('g').attr({! width: width,! height: height,! transform: "translate("+margin+","+margin+")"! });! ! // ৭ͷई! var color = d3.scale.category10();
+BWB4DSJQUσʔλͷܗͱཧ // σʔλΛೖΕࢠʹ͢Δ! var speciesData = d3.nest()! // छྨ͝ͱʹྨ͢ΔΩʔΛࢦఆ! .key(function(d){
return d.Species;})! // ग़ྗΛΩʔʹϚονͨ͠ྻ͔Βɺฏۉʹมߋ! .rollup(function(values){! return d3.mean(values, function(d){ return d[key]; });! })! // ΛྻͰऔಘ! .entries(data);! ! // छྨͷΩʔҰཡΛऔಘ! var species = speciesData.map(function(d){ return d.key; });! ! // શମͷߴ͞ͷൣғΛऔಘ! var domain = d3.extent(data, function(d){ return d[key]; });!
+BWB4DSJQUई࡞ // y࠲ඪͷईΛऔಘ! var yScale = d3.scale.linear()! // มޙͷൣғ(Ҭ)! .range([0,
height])! // มલͷൣғ(ఆٛҬ)! .domain([0, domain[1]]);! ! // x࠲ඪͷईΛऔಘ! var xScale = d3.scale.ordinal()! // มޙͷൣғ(Ҭ)! .rangeBands([0, width], .2)! // มલͷൣғ(ఆٛҬ)! .domain(species);
+BWB4DSJQUΛඳը // (ͷάϧʔϓ)ཁૉΛ࡞! var bar = main.selectAll('g')! .data(speciesData)! .enter()! .append('g')!
.attr({! transform: function(d){! return "translate("+xScale(d.key)+","+height+")";! }! });! ! // Λඳը! bar.append('rect').attr({! // ۣܗͷߴ͞! height: function(d){ return yScale(d.values); },! // ۣܗͷҐஔ! y: function(d){ return -yScale(d.values); },! // ۣܗͷ෯! width: xScale.rangeBand(),! // ۣܗͷ৭! fill: function(d){ return color(d.key); }! });!
+BWB4DSJQUʹΛඳը // (ͷάϧʔϓ)ཁૉΛ࡞! var bar = main.selectAll('g')! .data(speciesData)! .enter()! .append('g')!
.attr({! transform: function(d){! return "translate("+xScale(d.key)+","+height+")";! }! });! ! // Λඳը (લड़)! // Λඳը! bar.append('text')! // ςΩετྨͨ࣌͠ͷΩʔ! .text(function(d){! return d.values.toFixed(2);! })! .attr({! // ҐஔΛͷ্ʹ! dy: function(d){ return - yScale(d.values); },! dx: xScale.rangeBand() / 2,! fill: 'black'! }).style('text-anchor', 'middle');
+BWB4DSJQU࣠ͷඳը // x࣠ੜͷϢʔςΟϦςΟ! var xAxisSvg = d3.svg.axis().scale(xScale);! // y࣠ੜͷϢʔςΟϦςΟ! var
yAxisSvg = d3.svg.axis().scale(yScale.copy()! .range([height, 0])).orient('left');! // x࣠Λੜ! var xAxis = main.append('g').call(xAxisSvg).attr('class', 'axis')! .attr("transform", "translate(0,"+height+")");! // y࣠Λੜ! var yAxis = main.append('g').call(yAxisSvg).attr('class', 'axis');! ! // y࣠ͷϥϕϧΛهड़! main.append('text').text(key).attr({! transform: "translate(-30,"+(height / 2)+") rotate(-90)"! });
՝ άϥϑ ંઢάϥϑ ࢄਤ ΠϯλϥΫγϣϯ Ξχϝʔγϣϯ δΦϚοϐϯά