KDPV誰ãããªãŒãã³ãœãŒã¹ãœãããŠã§ã¢ãäœæããŠããŸãããç§ã¯ãœãããŠã§ã¢ãããè¯ãããæ¹æ³ã«ã€ããŠå€ãã®æéãè²»ãããŠããŸãã ã¹ã¿ãã¯ãªãŒããŒãããŒãGitHubãSlackãé»åã¡ãŒã«ããã©ã€ããŒãã¡ãã»ãŒãžãã©ãŒã©ã ã«é¢ãããã«ãã®ãªã¯ãšã¹ãã®ç¡éã®æµãã¯é¿ããããŸããã 幞ããªããšã«ãæçµçã«ã¯ãããçšåºŠã®æåãåããŠçŽ æŽãããããšãæãéããå€ãã®äººã
ãç¥ã£ãŠããŸããããªããšããªãã®å©ãã®ãããã§ããã«åå ãããšããç¥èã¯ãæ°ããæ¥çžŸã®è¯ãåæ©ã«ãªããŸãã
åé¡ã¯ããœãããŠã§ã¢ã®ã©ã®å質ãéçºè
ãæåãŸãã¯å€±æã«å°ãã®ããšããããšã§ãã ãœãããŠã§ã¢ãæ¹åããããå€ãã®äººã
ãæåããããã«ããã«ã¯ã©ãããã°ããã§ããïŒ ããã€ãã®åºæ¬ååãæç¢ºã«ããããå Žåã«ãã£ãŠã¯çŽèгã«é Œã£ããã§ããŸããïŒ ïŒ1ã€ã®æèã®èªçãšå
·äœåã¯ã2ã€ã®ãŸã£ããç°ãªãã¢ã¯ã·ã§ã³ã§ãïŒã
ããããããã¯
Dieter Ramsã®ååã®ãããªãã®ã§ãé«å質ã®ãœãããŠã§ã¢èšèšã«è²¢ç®ããŠããã®ã§ããããïŒ
- åªãããããžã§ã¯ãã¯é©æ°çã§ãã
- è¯ããããžã§ã¯ãã¯ã補åã䟿å©ã«ããŸãã
- è¯ããã¶ã€ã³ã¯çŸåŠã§ãã
- åªãããããžã§ã¯ãã¯ã補åãçè§£ããããããŸãã
- è¯ããããžã§ã¯ãã¯æ§ããã§ãã
- è¯ããããžã§ã¯ãã¯æ£çŽã§ãã
- è¯ããããžã§ã¯ãã¯é·ãã§ãã
- åªãããããžã§ã¯ãã¯ã现éšã«è³ããŸã§èãæãããŸãã
- è¯ããããžã§ã¯ãã¯ç°å¢ã«åªããã§ãã
- åªããèšèšãããžã§ã¯ãã§ã¯ãå¯èœãªéãå°ãªãã
å
šäœåã¯ã仿¥ç§ãæžããŠããããšãããããããéèŠã§ããã圌女ã®ãã¢ããã€ã¹ãã¯æã
éå®çšçã§ãããããŸã£ããé©çšã§ããªãããããã«æªãããšã«ã
çå®ã§ãã ããã¯ããã§ããã ãç°¡åã«å®è¡ããŸãããåçŽãããªãããšãã§ãã
ïŒãã§ããã ãã·ã³ãã«ã«ããããã·ã³ãã«ã§ã¯ãªãããå
ã®ã¡ã¢ãïŒ ç§ãã¡å
šå¡ãç©äºããã£ãšã·ã³ãã«ã«ãããã®ã¯æããã§ãã ãããããã®ç®æšãéæããããã«äœãããå¿
èŠããããæ£ç¢ºã«ããããªãå ŽåããããŸãã
ãããŠãããªãããã£ãŠããããšã®æ£ãããäžè¬çãªèãããæã£ãŠãããšããŠããããªãã®ãããžã§ã¯ããæåãããšããä¿èšŒã¯ãããŸããã ã¢ã€ãã¢ãå®è·µããæ¹æ³ã¯ãã¢ã€ãã¢èªäœãšåããããéèŠã§ãã æªéã¯è©³çްã«ãããŸãã
广çãªæ®éçãªã¢ããã€ã¹ãããããšã¯ã§ããŸããããããããå¥ã®æ¹æ³ãããã§ãããã ç§ã¯
ããŒãã¹ã»ã°ãªãŒã³ãšããªã¢ã³ã»ããã¬ã«è§ŠçºãããŸããããããã®ãèªç¥ç次å
ãã¯ãã³ãŒããªã©ã®ãæ
å ±ã¢ãŒãã£ãã¡ã¯ããã®é©åæ§ã«ã€ããŠãè°è«ã®ã¬ãã«ãäžãããããã®ãèšè«å¯èœãªããŒã«ãã®ã»ãããå®çŸ©ããŸãã
- æœè±¡çãªã°ã©ããŒã·ã§ã³ã
- è¿æ¥ãã£ã¹ãã¬ã€;
- ã·ãŒã±ã³ã¹;
- ãŒãã;
- ééãã®çŽ å ;
- å°é£ãªã¡ã³ã¿ã«ãªãã¬ãŒã·ã§ã³ã
- é衚瀺ã®äŸåé¢ä¿ã
- æ©ããã矩å;
- ããã°ã¬ãã·ãè©äŸ¡;
- 圹å²ã®è¡šçŸå;
- äºæ¬¡æå®;
- ç²åºŠ
- å¯èŠæ§
å®ç§ãªãã©ãããã©ãŒã ã¯ãããŸããã ããïŒããçš®ã®æœè±¡çãªãã©ãããã©ãŒã ïŒã¯ãããžã¥ã¢ã«ããã°ã©ãã³ã°ç°å¢ãç ç©¶ããããã«ãå Žåã«ãã£ãŠã¯ç¹å®ã®ã¢ããªã±ãŒã·ã§ã³åãã«äœæãããŸããã ïŒäžåºŠã«ãã¹ãŠã®ã³ãŒãã®èŠ³æž¬ãã·ãã¥ã¬ãŒãããç¶æ³ãèããŠãã ããã仿¥ã®ãœãããŠã§ã¢ã¯ã1ã€ã®ç»é¢ã§å®å
šã«è¡šç€ºã§ããã»ã©å°ããã§ããïŒãããããã¢ãžã¥ãŒã«æ¹åŒã®æ¹ãè¯ãã§ããããïŒïŒã ããæ¬¡å
ãŸãã¯å¥ã®æ¬¡å
ã®äœ¿ããããã®åé¡ãé©åã«åŠçããã®ã¯é£ãããšæããŸãã ïŒé ãããäŸåé¢ä¿ãšããŒã«è¡šçŸåã®äž¡æ¹ã¯ã以åã«è¡ããããã®ãšã¯ç°ãªãäœãããã®ã³ãŒãã§è¡ãããããšãèŠå®ããŠããŸãïŒ ãã ããããã¯ãœãããŠã§ã¢èšèšã®ãèªç¥ç嫿ãã«ã€ããŠèããã«ã¯è¯ãé£ã¹ç©ã§ãã
ãå
±éãã¬ãŒã ã¯ãŒã¯ããå®çŸ©ããŸããã ããããç§ã¯æ¬åœã«å
±æãããæèŠãããã€ããããŸããããã¯æšå¹Žã®äºåŸåçåãå®äºããã®ã«é©ããææã§ããç§ã¯
D3 4.0ã«å€ããè²»ãããŸããã
ãå€§èŠæš¡ãªã
D3ãããžã§ã¯ãã«ã¯æ»ããŸããã ããŒã¿æ¥ç¶ãã¹ã±ãŒã«ãèŠèŠè¡šçŸãšã¯å¥ã®ã¬ã€ã¢ãŠããªã©ã®æŠå¿µã«éåžžã«æºè¶³ããŠããŸãã ããã«ã¯è峿·±ãç ç©¶ããããããã¯ç§ã®æåŸã®çŠç¹ã§ã¯ââãããŸããã ç§ã¯D3ãã¢ãžã¥ãŒã«ã«åå²ããŠãããå€ãã®ã¢ããªã±ãŒã·ã§ã³ã§ã®äœ¿çšã«é©ãããã®ã«ããä»ã®ã¢ããªã±ãŒã·ã§ã³ãžã®æ¡åŒµã容æã«ããéçºã容æã«ããŸãããäœæ¥äžã§ãã ãŸããAPIã®å€æ°ã®æ¬ é¥ã𿬠ç¹ãç¹å®ããŠä¿®æ£ããŸãã ãããã¯ç°¡åã«èŠèœãšãããã¡ã§ãããåæã«ã人ã
ã®è¡åã倧ããå¶éããŸãã
ç¹ã«ãåå¥ã«æ€èšããå Žåããããã®å€æŽãäºçްãªããšã§ãããšå¿é
ããããšããããŸãã ããã§ãªããã°ããªããçŽåŸãããããšãã§ãããšæããŸãã ç§ãã¡ïŒã€ãŸãããœãããŠã§ã¢ãæžã人ïŒã¯ãããã°ã©ãã³ã°ã€ã³ã¿ãŒãã§ã€ã¹ã®äœ¿ãããããéå°è©äŸ¡ããåŸåãããã代ããã«æž¬å®ãããã客芳çãªåè³ªïŒæ©èœæ§ãããã©ãŒãã³ã¹ãæ£ç¢ºãïŒãèæ
®ããåŸåããããšæãã®ã§å¿é
ã§ãã
ãã®ãããªå質ã¯éèŠã§ããããŠãŒã¶ããªãã£ã®äœãã«ã¯çã®äŸ¡å€ããããŸãã ãããã¬ãŒãšã®æŠéäžã«ãã³ãŒãã®ãã€ãããããã¯ãèŠã€ãããã髪ãåŒãè£ãã®ã«èŠåŽãã人ã«èããŠãã ããã ãããããŠãŒã¶ããªãã£ãããããè©äŸ¡ããæåã«äœ¿çšããé«å質ã®ãœãããŠã§ã¢ãäœæããå¿
èŠããããŸãã
ã³ãŒããã€ããã§ããã®éãã質æãæã§æããããšã¯ã§ããŸããã ã³ãŒãã¯ãæ
å ±ãªããžã§ã¯ããã§ãããç©ççãŸãã¯ã°ã©ãã£ãã¯ã§ã¯ãããŸããã ãšãã£ã¿ãŒãŸãã¯ã³ãã³ãã©ã€ã³ã§ããã¹ããæäœããŠãAPIãæäœããŸãã
ããããããã¯ã人çèŠå ã®ååšãšã®æå®ã®åºæºã«åŸã£ãçžäºäœçšã§ãã ãããã£ãŠãç®çã®ã¿ã¹ã¯ã®å®è¡å¯èœæ§ã®åºæºã«ãã£ãŠãä»ã®ããŒã«ãšåæ§ã«ã³ãŒããè©äŸ¡ã§ããŸãããçµéšè±å¯ãªããã°ã©ããŒã«ãªã£ãŠå¹æçã«äœ¿çšããã®ã¯æ¬åœã«ç°¡åã§ããïŒ ã³ãŒãã®å¯èœæ§ãšçŸåŠãèæ
®ããªããã°ãªããŸããã ãã¹ãŠãæ¬åœã«æç¢ºã§ããïŒ ãŸãã¯ãéã«æ²ããã§ããïŒ ãŸãã¯å€åçŸããïŒ
ããã°ã©ãã³ã°ã€ã³ã¿ãŒãã§ã€ã¹-ãããã¯ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã§ãã ãŸãã¯ãå¥ã®èšãæ¹ãããã°ãããã°ã©ããŒã人éã§ãã ãã¶ã€ã³ã®éçºã«ããã人éã®åŽé¢ãéå°è©äŸ¡ããããšãããŒãã«ãã©ã ãºæ°ã¯åã³è³ã«ããŸãã
ã人ã
ãžã®ç¡é¢å¿ãšåœŒããçããçŸå®ã¯ãå®éã«ã¯ãã¶ã€ã³ã«ãããå¯äžç¡äºã®çœªã§ããã
ããšãã°ãåªããããã¥ã¡ã³ãã¯è²§åŒ±ãªãã¶ã€ã³ãæ£åœåãããã®ã§ã¯ãããŸããã ãã¹ã¢ãŒã¯ããã«è¡ããããã«ã¢ããã€ã¹ããããšã¯ã§ããŸããããã¹ãŠãèªãã§ãã¹ãŠã®è©³çްãèŠããŠãããšèããã®ã¯æããªããšã§ãã äŸã®æçããçŸå®ã®äžçã§ãœãããŠã§ã¢ãè§£èªããã³ç·šéããèœåã¯ãããããã¯ããã«éèŠã§ãã ãã©ãŒã ã¯é¢æ°ãæž¡ãå¿
èŠããããŸãã
ããã§ã¯ã䜿ãããããèæ
®ããŠãD3ã§ç®ã§èŠã倿Žã®äžéšã瀺ããŸãã ãããããŸããD3ã®ããŒã¿åŠçã«é¢ããéäžã³ãŒã¹ã§ãã
ã±ãŒã¹1.éæ³ã®enter.appendãåé€ããŸãã
ãD3ãã¯ããŒã¿é§ååããã¥ã¡ã³ãã衚ããŸãã ããŒã¿ã¯èŠèŠåãããã®ãæããããã¥ã¡ã³ãã¯ãã®èŠèŠç衚çŸãæããŸãã D3ã¯WebããŒãžã®æšæºã¢ãã«ã§
ããããã¥ã¡ã³ããªããžã§ã¯ãã¢ãã«ã«åºã¥ããŠãããããããã¯ãããã¥ã¡ã³ãããšåŒã°ã
ãŸã ã
ã·ã³ãã«ãªããŒãžã¯æ¬¡ã®ããã«ãªããŸãã
<!DOCTYPE html> <svg width="960" height="540"> <g transform="translate(32,270)"> <text x="0">b</text> <text x="32">c</text> <text x="64">d</text> <text x="96">k</text> <text x="128">n</text> <text x="160">r</text> <text x="192">t</text> </g> </svg>
ããã¯SVGèŠçŽ ãå«ãHTMLããã¥ã¡ã³ãã«ãªããŸãããæŠå¿µãçè§£ããããã«åèŠçŽ ãšå±æ§ã®ã»ãã³ãã£ã¯ã¹ãç¥ãå¿
èŠã¯ãããŸããã ããšãã°ãç¹å®ã®ããã¹ãã®åèŠçŽ ã¯ãåå¥ã®ã°ã©ãã£ãã¯æåã§ããããšã«æ³šæããŠãã ããã èŠçŽ ã¹ã¿ã€ã«ã®ã°ã«ãŒããé
眮ã§ããããã«ãèŠçŽ ã¯éå±€é ã«ã°ã«ãŒãåãããŸãïŒããã«å«ããå«ããªã©ïŒã
é©åãªãµã³ãã«ããŒã¿ã»ããã¯æ¬¡ã®ããã«ãªããŸãã
var data = [ "b", "c", "d", "k", "n", "r", "t" ];
ãã®ããŒã¿ã»ããã¯æååã®é
åã§ãã ïŒæååã¯æåã®ã·ãŒã±ã³ã¹ã§ãæååããšã«å¥ã
ã®æåããããŸããïŒãã ããJavaScriptã§è¡šçŸã§ããå ŽåãããŒã¿ã¯ä»»æã®æ§é ãæã€ããšãã§ããŸãã
ããŒã¿é
åå
ã®åã¬ã³ãŒãïŒåè¡ïŒã«ã€ããŠãããã¥ã¡ã³ãå
ã®å¯Ÿå¿ããèŠçŽ ãå¿
èŠã§ãã ãããããŒã¿çµåã®ç®çã§ããããã¥ã¡ã³ãã倿ããç°¡åãªæ¹æ³ã¯ãããŒã¿ã«äžèŽããããã«èŠçŽ ã远å ãåé€ããŸãã¯å€æŽããããšã§ãã

ãœãŒã¹ãšããŠã®ããŒã¿çµåã¯ãããŒã¿ã®é
åãšããã¥ã¡ã³ãèŠçŽ ã®é
åãåãåããéžæãã3ã€ã®ãªãã·ã§ã³ãè¿ããŸãã
å
¥åã®éžæã¯ãããã¥ã¡ã³ããäœæããŠããã¥ã¡ã³ãã«è¿œå ããå¿
èŠã®ãããæ¬ èœãèŠçŽ ïŒå
¥åããŒã¿ïŒã衚ããŸãã
æŽæ°ã®éžæã¯ã倿ŽïŒåé
眮ãªã©ïŒã«å¿
èŠãªæ¢åã®èŠçŽ ïŒããŒã¿ã¹ãã¬ãŒãžïŒã衚ããŸãã åºåã¿ã€ãã®éžæã¯ãããã¥ã¡ã³ãããåé€ããå¿
èŠããããæ®ãã®ãèŠçŽ ïŒéä¿¡ããŒã¿ïŒã衚ããŸãã
ããŒã¿ãçµåããŠããããã¥ã¡ã³ãèªäœã¯å€æŽãããŸããã çµæãèšç®ãå
¥åãæŽæ°ã衚瀺ããŠãããå¿
èŠãªãã¹ãŠã®æäœãå®è¡ããŸãã ããã«ãããå¯èŠæ§ãæäŸãããŸããããšãã°ãèŠçŽ ã®å
¥åãšåºåãã¢ãã¡ãŒã·ã§ã³åããŸãã

ãæ³åã®ãšãããããŒã¿ã®ããŒãžã¯ãæåã®èŠèŠåãšãã¹ãŠã®å€æŽã®äž¡æ¹ã§ãã䜿çšãããã®ã§ãã ãã®æ©èœã®äœ¿ããããã¯ãD3ã®å
šäœçãªãæçšæ§ãã«ãšã£ãŠéåžžã«éèŠã§ãã æ¬¡ã®ããã«ãªããŸãã
var text = g .selectAll("text") .data(data, key); // JOIN text.exit() // EXIT .remove(); text // UPDATE .attr("x", function(d, i) { return i * 32; }); text.enter() // ENTER .append("text") .attr("x", function(d, i) { return i * 32; }) // .text(function(d) { return d; });
ããã€ãã®è©³çްïŒããšãã°ãèŠçŽ ã«ããŒã¿ãå²ãåœãŠãéèŠãªæ©èœïŒã«ã€ããŠã¯è§ŠããŸããã§ãããããããã¯ã®æ¬è³ªãæããã«ãªãããšãé¡ã£ãŠããŸãã äžèšã®ã³ãŒãã¯ãããŒã¿ãšçµåããåŸãæ¢åã®èŠçŽ ãåé€ããæŽæ°èŠçŽ ãåé
眮ããŠãçä¿¡èŠçŽ ã远å ããŸãã
äžèšã®ã³ãŒãã«ã¯ã誰ããéå±ããŠãããŠãŒã¶ããªãã£ã®åé¡ããããŸãïŒline
.attr("x", function(d, i) { return i * 32; }) //
ïŒã ããã¯éè€ããã³ãŒãã§ããå
¥åããã³æŽæ°ãã屿§ãxããèšå®ããŸãã
éåžžããããã®æäœã¯ãå
¥åãšèŠçŽ ã®æŽæ°ã®äž¡æ¹ã«äœ¿çšãããŸãã ã¢ã€ãã ãæŽæ°ãããå ŽåïŒã€ãŸããæåããäœæããŠããªãå ŽåïŒã倿Žããå¿
èŠããããŸãã ãã®ãããªå€æŽã¯ãæ°ããããŒã¿ãåæ ããå¿
èŠããããããå€ãã®å ŽåãèŠçŽ ã®å
¥åã«äœ¿çšãããŸãã
D3 2.0ã¯ãéè€ã®åé¡ã解決ããããã«ç¹å®ã®å€æŽãå ããŸãããéžæã«å
¥åã远å ãããšãèŠçŽ ã®å
¥åãæŽæ°éžæã«ã³ããŒãããããã«ãªããŸããã ãããã£ãŠãéžæã«å
¥åã远å ããåŸã«æŽæ°ã®ãªã¹ãã«é©çšãããæäœã¯ãå
¥åãšèŠçŽ ã®å€æŽã®äž¡æ¹ã«é©çšããããããéè€ããã³ãŒãã¯åé€ãããŸãã
var text = g .selectAll("text") .data(data, key); // JOIN text.exit() // EXIT .remove(); text.enter() // ENTER .append("text") // .text(function(d) { return d; }); text // ENTER + UPDATE .attr("x", function(d, i) { return i * 32; });
æ²ããããªãããã¯ãŠãŒã¶ããªãã£ãæªåãããŸããããŸããå
éšã§äœãèµ·ãã£ãŠããããç€ºãææšããããŸããïŒããŒã«ã®è¡šçŸåãä¹ããããŸãã¯ããããé ãããäŸåé¢ä¿ïŒã ã»ãšãã©ã®å Žåã
selection.append
ã¯æ°ããèŠçŽ ãäœæã远å ãéžæããŸãã ããã©ã«ãã§ã¯ãæŽæ°ã®éžæã倿ŽãããŸãã ãµãã©ã€ãºïŒ
次ã«ãã³ãŒãã¯æäœã®é åºã«äŸåããããã«ãªããŸãããæŽæ°ãéžæããæäœã
enter.append
ãããåã«é©çšãããå ŽåãããŒãã®æŽæ°ã®ã¿ã«åœ±é¿ããŸãã ããããåŸã§é©çšãããå Žåããã®å Žåãå
¥åãšæŽæ°ã®äž¡æ¹ã«åœ±é¿ããŸãã ããŒã¿ãçµåããç®çã¯ããã®ãããªè€éãªããžãã¯ãæé€ããè€éãªåå²ãå埩ãè¡ããã«ãææžå€æã®ãã宣èšçãªä»æ§ãé©çšããããšã§ãã ã³ãŒãã¯ãã£ãšã·ã³ãã«ã«èŠãããããããŸããã
D3 4.0ã¯
enter.append
ã®äžç¢ºå®æ§ã
enter.append
ãŸãã ïŒå®éãD3 4.0ã¯å
¥åãšéžæã®åºå¥ãå®å
šã«æé€ããŠããŸããéžæã§ããã¯ã©ã¹ã¯1ã€ã ãã§ãïŒã ãã®ä»£ããã«ãæ°ãã
selection.merge
ã¡ãœããããããŸããããã¯ãå
¥åéžæãšæŽæ°ãçµã¿åãããããšãã§ããŸãã
var text = g .selectAll("text") .data(data, key); // JOIN text.exit() // EXIT .remove(); text.enter() // ENTER .append("text") .text(function(d) { return d; }) .merge(text) // ENTER + UPDATE .attr("x", function(d, i) { return i * 32; });
ãã®ã¡ãœããã¯ãäžè¬ã«åãå
¥ããããŠããææ³ïŒselection.appendïŒã®åäœãæªãŸããããšãªããé åºäŸåæ§ãå°å
¥ããããšãªããéè€ã³ãŒããæé€ããŸãã ããã«ãselection.mergeã¡ãœããã¯èªè
ãžã®ãªãã¿ã®ãªããã€ã³ã¿ã§ãããããã¥ã¡ã³ãã§èŠã€ããããšãã§ããŸãã
åå1.éè² è·ãé¿ãã
ãã®å€±æããã©ã®ãããªçµè«ãå°ãåºãããšãã§ããŸããïŒ D3 3.xã¯ã©ã ãºã®ååã«éåããŸãããåªãããã¶ã€ã³ã¯è£œåãçè§£ããããããŸãã ãã£ã¡ã³ã·ã§ã³ã«é¢ããŠã¯ã
selection.append
ã®å
¥åéžæã«å¯Ÿããåäœãç°ãªããããäžè²«æ§ããããŸããã§ããã ãã®æ¹æ³ã¯ãéå»ã®åäœãæããã§ã¯ãªãã£ãããã圹å²ã®è¡šçŸåãä¹ããã£ãã ãŸããé衚瀺ã®äŸåé¢ä¿ããããŸããå
¥åã远å ããåŸã«ããã¹ãéžææäœãéå§ããå¿
èŠããããŸãããã³ãŒãã«ã¯ãã®èŠä»¶ãæç€ºãããŠããŸããã
D3 4.0ã¯ãå€ã®ãªãŒããŒããŒããåé¿ããŸãã
enter.append
ã«ããã©ã«ãã§æ©èœã远å ãã代ããã«ãäžè¬çãªå Žåã«åœ¹ç«ã€å Žåã§ãã
selection.append
åžžã«èŠçŽ ã®ã¿ã远å ããŸãã ãµã³ãã«ãçµåããå Žåã¯ãæ°ããã¡ãœãããå¿
èŠã§ãïŒ ãããã£ãŠãããã¯
selection.merge
ã§ãã
ã±ãŒã¹2. transition.eachããžãã¯ã®åé€
é·ç§»ã¯ãããã¥ã¡ã³ããžã®å€æŽãã¢ãã¡ãŒã·ã§ã³åããã€ã³ã¿ãŒãã§ã€ã¹ãéžæããããšã«äŒŒãŠããŸãã ããã¥ã¡ã³ããå³åº§ã«å€æŽãã代ããã«ãé·ç§»ã¯ããã¥ã¡ã³ããçŸåšã®ç¶æ
ããç¹å®ã®æéã®éãç®çã®ã¿ãŒã²ããç¶æ
ã«ã¹ã ãŒãºã«è£éããŸãã
ãã©ã³ãžã·ã§ã³ã¯ç°ç𮿷·åã«ããããšãã§ããŸããè€æ°ã®éžæãä»ããŠãã©ã³ãžã·ã§ã³ãåæããå¿
èŠãããå ŽåããããŸãã ããšãã°ãè»žã«æ²¿ã£ãŠç§»åããã«ã¯ãç·ãšã©ãã«ã®äœçœ®ãåæã«ãã§ãã¯ããå¿
èŠããããŸãã

ãŸãã¯ããªãã·ã§ã³ã®1ã€ãšããŠïŒ
bl.ocks.org/1166403 One way of specifying such a transition: d3.selectAll("line").transition() .duration(750) .attr("x1", x) .attr("x2", x); d3.selectAll("text").transition() // .duration(750) // .attr("x", x);
ïŒxã¯ç·åœ¢ã¹ã±ãŒã«ãšåã颿°ã§ã察å¿ããããŒã¿å€ããåç®çãã®æ°Žå¹³äœçœ®ãèšç®ããã®ã«åœ¹ç«ã¡ãŸãïŒããããã®2è¡ïŒ
d3.selectAll("text").transition() //
ããã³
.duration(750) //
ïŒã¯æ³šæããå¿
èŠããããŸãã éè€ããã³ãŒããåã³è¡šç€ºãããŸããè¡èŠçŽ ãšããã¹ãèŠçŽ ã®é·ç§»ã¯åå¥ã«äœæããããããé
å»¶ãæéãªã©ã®åæãã©ã¡ãŒã¿ãŒãè€è£œããå¿
èŠããããŸãã
åé¡ã¯ããããã®2ã€ã®é·ç§»ãåæããããšããä¿èšŒããªãããšã§ãã 2çªç®ã®é·ç§»ã¯æåã®é·ç§»ã®åŸã«äœæããããããå°ãé
ããŠéå§ãããŸãã ããã§ã¯ãä»ã®ã¢ããªã±ãŒã·ã§ã³ãšã¯ç°ãªãã1ã2ããªç§ã®å·®ã¯æç¥ã§ããªãå ŽåããããŸãã
D3 2.8ã¯ããã®çš®ã®ç°çš®é·ç§»ãåæããããã®æ°ãã颿°ãå°å
¥ããŸãããããã«ããã
transition.each
éžæãããåèŠçŽ ãå埩åŠçããæ¹æ³ã远å ãããŸããã æ¬¡ã®ããã«èšããŸãïŒ
var t = d3.transition() .duration(750); t.each(function() { d3.selectAll("line").transition() // .attr("x1", x) .attr("x2", x); d3.selectAll("text").transition() // .attr("x", x); });
enter.append
ã䜿ãåæãæªãïŒæ¢åã®ã¡ãœããïŒselection.eachãšselection.transitionïŒã®åäœãéç¥ããã«å€æŽããŸãã ç¹å®ã®éžæã§2çªç®ã®ãã©ã³ãžã·ã§ã³ãäœæããå Žåãå€ããã©ã³ãžã·ã§ã³ã¯çœ®ãæããããŸããã å€ããã©ã³ãžã·ã§ã³ãåéžæããã ãã§ãã ãã£ãšïŒ
ãã®äŸã¯ãæ®å¿µãªãããæè²åŠã®ããã«èæ¡ãããŸããã transition.selectãštransition.selectAllã䜿çšããŠãã§ããããããšã§é·ç§»ãåæããå¥ã®ããæç¢ºãªæ¹æ³ããããŸãïŒD3 3.xã§ãïŒïŒ
var t = d3.transition() .duration(750); t.selectAll("line") .attr("x1", x) .attr("x2", x); t.selectAll("text") .attr("x", x);
ãã®å Žåãããã¥ã¡ã³ãã«ãŒããã£ã¬ã¯ããªãžã®é·ç§»tã¯ãè¡èŠçŽ ãšããã¹ãèŠçŽ ãéžæããããšã§é©çšãããŸãã ãã®ç§»è¡ã¯å¶éãããŠããããã®åé¡ã®è§£æ±ºçã¯æ¬¡ã®ãšããã§ããç§»è¡ã¯æ°ããéžæè¢ã«ã®ã¿é©çšã§ããŸãã åéžæã¯åžžã«å¯èœã§ãããäœåãªäœæ¥ãšäœåãªã³ãŒãã§ãïŒç¹ã«ãããŒã¿ããŒãªã³ã°ã«ãã£ãŠè¿ãããäžæçãªå
¥åãæŽæ°ãããã³çµäºã®éžæïŒã
D3 4.0ã§ã¯ãtransition.eachã®ç§»è¡ããžãã¯ã®ãããŸããããªããªããŸããã ããã§selection.eachã³ãã³ãã®å®è£
ãæäŸãããŸãã 代ããã«ãselection.transitionã³ãã³ããå€æææ®µã«æž¡ãããšãã§ãããã®çµæãæ°ããé·ç§»ã¯æå®ãããé·ç§»ããæéãç¶æ¿ããŸãã ããã§ãæ°ããéžæè¢ãäœæãããšãã«ç®çã®åæãå®çŸã§ããŸãã
var t = d3.transition() .duration(750); d3.selectAll("line").transition(t) .attr("x1", x) .attr("x2", x); d3.selectAll("text").transition(t) .attr("x", x); Or when using existing selections: var t = d3.transition() .duration(750); line.transition(t) .attr("x1", x) .attr("x2", x); text.transition(t) .attr("x", x);
æ°ãããã¶ã€ã³ã¯selection.transitionã®åäœãæªããŸãã ããããæ°ããã·ã°ããã£ã¡ãœããïŒååã¯åãã§ãã©ã¡ãŒã¿ãŒãç°ãªãã¡ãœããïŒã¯ãããªãäžè¬çãªãã¶ã€ã³ãã¿ãŒã³ã§ãããåäœã®éãã¯1åã®åŒã³åºãã§ç¹å®ãããŸãã
åå2.è¡åã®ãã¿ãŒã³ãé¿ããŸãã
ãã®ååã¯ãããé倧ãªéåã«å¯Ÿããå€ã®éè² è·ãé¿ããããã«ãåã®ååã®ç¶ç¶ã§ãã ããã§D3 2.8ã¯selection.transitionãšã®ççŸãå°å
¥ããŸããããåäœããªã¬ãŒã¯å¥ã®ã¯ã©ã¹ã§ã¯ãããŸããã§ããã ããã¯ã¡ããã©transition.eachåŒã³åºãã®äžã«ãããŸããã ãã®èšèšã®å€§ããªçµæã¯ãtransition.eachã§ã©ããããããšã«ãããèšè¿°ããªãã£ãã³ãŒãã®åäœã倿Žã§ããããšã§ãã
ã°ããŒãã«å€æ°ãèšå®ããŠåäœãã°ããŒãã«ã«å€æŽããã³ãŒããèŠã€ããå Žåãããã¯ããããæªãèãã§ãã
æ¯ãè¿ã£ãŠã¿ããšãä»åã¯ç¹ã«å°è±¡çã ãšæããŸãã ç§ã¯ã¡ããã©äœãèããŠããŸãããïŒ ãã¶ãç§ã¯å€±æãããã¶ã€ããŒã§ããïŒ æªãã¢ã€ãã¢ãé
åçã§ããçç±ãçè§£ããããšã«ã¯ãããçšåºŠã®æ
°ãããããŸããããã¯ãå°æ¥èªèããåé¿ããã®ãç°¡åã§ãã ããã§ãæ°ããæ¹æ³ã®äœ¿çšãé¿ããŠãæ³åäžã®è€éããæå°éã«æããããšããããšãæãåºããŸãã ãã ããããã¯ãæ¢åã®ã¡ãœããããªãŒããŒããŒããããããæ°ããã¡ãœããïŒãŸãã¯çœ²åïŒãå°å
¥ããæ¹ãç°¡åãªå¥œäŸã§ãã
ã±ãŒã¹3.ããžãã¯d3.transitionã®åé€ïŒéžæïŒ
ææ°ã®ããã°ã©ãã³ã°èšèªã®åŒ·åãªæŠå¿µã¯ãåå©çšå¯èœãªã³ãŒããããã¯ã颿°ãšããŠå®çŸ©ã§ããããšã§ãã ã³ãŒãã颿°ã«å€æãããšãã³ããŒããŠè²Œãä»ããããšãªãã奜ããªå Žæã§åŒã³åºãããšãã§ããŸãã äžéšã®ãœãããŠã§ã¢ã©ã€ãã©ãªã¯ã³ãŒãã®åå©çšã®ããã«ç¬èªã®æœè±¡åãå®çŸ©ããŸããïŒããšãã°ããã€ã¢ã°ã©ã ã®ã¿ã€ããæ¡åŒµããŸãïŒãD3ã¯ã³ãŒããã«ãã»ã«åããæ¹æ³ã®ã€ã³ãžã±ãŒã¿ãŒã§ããããã¯é¢æ°ã§ã®ã¿è¡ãããšããå§ãããŸãã
éžæã¯ãšãªãšé·ç§»ã¯ãselection.styleãtransition.styleãªã©ã®å€ãã®ã¡ãœãããå
±æããŠã¹ã¿ã€ã«ããããã£ãèšå®ãããããéžæã¯ãšãªãšé·ç§»ã®äž¡æ¹ã«åœ±é¿ãã颿°ãäœæã§ããŸãã äŸïŒ
function makeitred(context) { context.style("color", "red"); }
makeitredéžæãèšå®ããŠãããã¹ããèµ€ã§å³åº§ã«åæç»ã§ããŸãã
d3.select ("body") .call (makeitred);
ãã ããmakeitredã«ãã©ã³ãžã·ã§ã³ãæž¡ãããšãã§ããŸãããã®å Žåãããã¹ãã®è²ã¯çæéèµ€ã«å€ãããŸãã
d3.select("body").transition().call(makeitred);
ãã®ã¢ãããŒãã¯ã軞ããã©ã·ãªã©ã®çµã¿èŸŒã¿D3ã³ã³ããŒãã³ããããã³ãºãŒã ãªã©ã®ã¢ãŒãã§äœ¿çšãããŸãã
ãã®ã¢ãããŒãã®æ¬ ç¹ã¯ãé·ç§»ãšéžæã«åäžã®APIããªãããããã¹ãŠã®ã³ãŒããäžå¯ç¥è«çã§ãããšã¯éããªãããšã§ãã 軞ã®ãã§ãã¯ããã¯ã¹ãæŽæ°ããããã®ããŒã¿éèšã®ã«ãŠã³ããªã©ã®æäœã«ã¯ããã§ããã¯ãšãªãå¿
èŠã§ãã
D3 2.8ã¯ããã®ãŠãŒã¹ã±ãŒã¹ã®å¥ã®èª€ã£ãæ©èœãæäŸããŸãããd3.transitionããªãŒããŒããŒãããéåžžã¯ããã¥ã¡ã³ãã«ãŒããã£ã¬ã¯ããªãžã®æ°ããé·ç§»ãè¿ããŸãã d3.transitionã³ãã³ããå
¥åããtransition.eachã³ãŒã«ããã¯ã®å
éšã«ããå Žåãd3.transitionã³ãã³ãã¯æå®ãããéžæè¢ã«æ°ããé·ç§»ãè¿ããŸãã ãã以å€ã®å Žåã¯ã瀺ãããéžæè¢ãè¿ãã ãã§ãã ïŒãã®é¢æ°ã¯ãäžèšã®transition.eachæ¬ é¥ãšåãã³ãããã«è¿œå ãããŸãããåé¡ã¯åç¬ã§ã¯çºçããŸããïŒïŒ
ç§ã®é¢åãªèª¬æããããã®é¢æ°ãäœæããããšã¯æªãèãã§ãããšçµè«ä»ããå¿
èŠããããŸãã ããããç§åŠã®ããã«ããããã詳现ã«èŠãŠã¿ãŸãããã äžèšã®
makeitred
颿°ãèšè¿°ããåæ§ã®æ¹æ³ã¯ãïŒsã䜿çšããŠïŒã³ãŒããïŒtã䜿çšããŠïŒå¥ã®ã³ãŒããæã€APIã®éžæã«å¶éãã代ããã«ã³ã³ããã¹ããé·ç§»ã§ããå ŽåãAPIé·ç§»ã«é©çšããŸãã
unction makeitred(context) { context.each(function() { // var s = d3.select(this), t = d3.transition(s); // t.style("color", "red"); }); }
transition.each
颿°ã®æ··ä¹±ã¯æ¬¡ã®ãšããã§ã
d3.transition
ã¯
selection.transition
ãåŒã³åºãã
transition.each
ã³ãŒã«ããã¯å
ã«ãããããæ°ããé·ç§»ã¯åšå²ã®é·ç§»ããåæãç¶æ¿ããŸãã åé¡ã¯ãd3.transitionãæ¬æ¥ãã¹ãããšãããŠããªãããšã§ãã ãŸããã³ã³ããã¹ããštã®äž¡æ¹ãäžæãªã¿ã€ãïŒéžæãŸãã¯é·ç§»ïŒã§ãããšããæ··ä¹±ããããŸãããéžæãšé·ç§»ã®äž¡æ¹ã«å¯ŸããŠmakeitred颿°ãåŒã³åºã䟿å©ãã«ãã£ãŠæ£åœåãããå¯èœæ§ããããŸãã
D3 4.0ã¯
d3.transition
ïŒéžæïŒãåé€ããŸãã
d3.transition
ã¯ã
d3.selection
ãšåæ§ã«ãããã¥ã¡ã³ãã®ã«ãŒããã£ã¬ã¯ããªãžã®ãã©ã³ãžã·ã§ã³ã®äœæã«ã®ã¿äœ¿çšã§ããããã«
d3.selection
ã éžæãšé·ç§»ãåé¢ããã«ã¯ãéåžžã®JavaScriptã³ãã³ãã䜿çšããŠã奜ã¿ã«å¿ããŠã¿ã€ãã確èªããŸãïŒ
instanceofãŸãã¯
duckã¿ã€ãã³ã° ïŒ
function makeitred(context) { var s = context.selection ? context.selection() : context, t = context; t.style("color", "red"); }
transition.each
ããã³
d3.transition
颿°ã®ãããžãã¯ããåé€ããããšã«å ããŠãæ°ãã
makeitred
颿°ã¯
transition.each
å®å
šã«åé¿ããªãããD3 4.0ã®éžæããã³æ°ããtransition.selectionã®äœ¿çšã«åºæã®ã³ãŒããèšè¿°ããããšãã§ããããšã«æ³šæããŠãã ãããã¡ãœããã ããã¯ãsã®éžæã䜿çšãããŠããããtãã³ã³ããã¹ããšåãæå³ãæã£ãŠããå Žåã®éåžžã«ãã§ãããããäŸã§ããããããã£ãŠãå
ã®å®çŸ©ã«ç°¡åã«çž®å°ã§ããŸãã
function makeitred(context) { context.style("color", "red"); }
ããããããã¯ç§ã®å人çãªæèŠã§ãã ç¹å®ã®ã³ãŒããéžæããå¿
èŠã¯ã
transition.each
ã®äœ¿çšã®å®å
šãªå¯Ÿå¿ãå¿
èŠãšããã¹ãã§ã¯ãããŸããïŒ ã°ãªãŒã³ãšããã©ã¯ããããææå°æ©ãªäºæ¥ãšåŒã³ãŸããã
åå3.æ£ç¢ºãªäœ¿çš
d3.transition
ã¡ãœããã¯ã2ã€ã®æäœãçµã¿åãããããšããŸããã æåã¯ã
transition.each callback
ã³ãã³ãå
ã«ãããã©ããã確èªããŸãã ãŸã ããã«ããå Žåã2çªç®ã®æäœã¯éžæããæ°ãããã©ã³ãžã·ã§ã³ãæœåºããŸãã ãã ããåŸè
ã¯selection.transitionã䜿çšã§ããããã
d3.transition
ã¯å€ãã®ããšãå®è¡ããããšãããã®çµæãé衚瀺ã«ãªããããŸãã
ã±ãŒã¹4. d3.activeã䜿çšããŠãã©ã³ãžã·ã§ã³ãç¹°ãè¿ã
D3é·ç§»ã¯æéã·ãŒã±ã³ã¹ã§ãã ã»ãšãã©ã®å Žåãç§»è¡ã¯ããã¥ã¡ã³ãã®çŸåšã®ç¶æ
ããç®çã®ç¶æ
ãžã®ç§»è¡ã§ãã ãã ããããã€ãã®æ®µéãçµãŠããææ
®æ·±ãã·ãŒã±ã³ã¹ãå¿
èŠã«ãªãå ŽåããããŸãã

ïŒã¢ãã¡ãŒã·ã§ã³ãæºåãããšãã¯æ³šæããŠãã ããïŒHeerïŒRobertsonã«ããStatistics Data Graphicsã®ãã©ã³ãžã·ã§ã³ã®ã¢ãã¡ãŒã·ã§ã³åã«é¢ããæ
å ±ããèªã¿ãã ãããïŒ
ãã®äŸã§èª¬æãããŠããã·ãŒã±ã³ã¹ãç¹°ãè¿ãããšãã§ããŸãã

D3ã«ã¯ç¡éã®ãã©ã³ãžã·ã§ã³ã·ãŒã±ã³ã¹çšã®ç¹å¥ãªã¡ãœããã¯ãããŸããããå€ããã©ã³ãžã·ã§ã³ãæ¢ã«çµäºããŠãããšãã«æ°ãããã©ã³ãžã·ã§ã³ãäœæã§ããŸãã ããã¯ãç§ããããŸã§ã«æžããäžã§æãçŽããããã³ãŒãäŸãå°ããŸããã
svg.selectAll("circle") .transition() .duration(2500) .delay(function(d) { return d * 40; }) .each(slide); // function slide() { var circle = d3.select(this); (function repeat() { circle = circle.transition() // .attr("cx", width) .transition() .attr("cx", 0) .each("end", repeat); })(); // }
以åã¯æ§ããŠãããèªç¥ççµæãã®åŸã«äœãã説æããããšããããšãããããããšããããŸãã ããããããªãã¯ããããéåžžã«é ãã®ã§ãç§ã¯æåãå°œãããŸãã æåã«ã
transition.each
ã¯ã«ãŒããå埩ãã
callback
ãèµ·åã
callback
ã
Callback
ã埪ç°å€æ°ããã£ããã£ããç¹°ãè¿ãåŒã³åºãã®çµäºã決å®ããŸãã æåã¯ããµã€ã¯ã«ã¯ãµã€ã¯ã«ã®1ã€ã®èŠçŽ ã®éžæã§ãã ãããã£ãŠããã©ã³ãžã·ã§ã³ã®æåã®ã¹ããŒãžã¯
selection.transition
ã䜿çšããŠäœæãããåšå²ã®ãã©ã³ãžã·ã§ã³ããæéãç¶æ¿ããŸãïŒ 2çªç®ã®ã¹ããŒãžã¯
transition.transition
ã䜿çšããŠäœæããããããæåã®ã¹ããŒãžãçµäºããåŸã«ã®ã¿éå§ãããŸãã 2çªç®ã®ã¹ããŒãžã¯ãµã€ã¯ã«ã«å²ãåœãŠãããŸãã ãããŠæåŸã«ã2段éã®ç§»è¡ã·ãŒã±ã³ã¹ãçµäºãããã³ã«ãç§»è¡ãµã€ã¯ã«ãç¹°ãè¿ããŠä¿®æ£ããç¹°ãè¿ãã³ãã³ããå®è¡ãããŸãã
ããã«ãããããã1ã€ã®ãã©ã¡ãŒã¿ãŒãæã€
transition.each
ã2ã€ã®ãã©ã¡ãŒã¿ãŒãæã€
transition.each
ãšã¯ãŸã£ããç°ãªãããšã«æ°ã¥ããã§ããããïŒ
ãããŒ
ã§ã¯ãD3 4.0ãšæ¯èŒããŸãããã
svg.selectAll("circle") .transition() .duration(2500) .delay(function(d) { return d * 40; }) .on("start", slide); function slide() { d3.active(this) .attr("cx", width) .transition() .attr("cx", 0) .transition() .on("start", slide); }
D3 4.0ã¯
d3.active
æäŸããæå®ãããèŠçŽ ã®ã¢ã¯ãã£ããªé·ç§»ãè¿ããŸãã ããã«ãããåãµã€ã¯ã«ã®ããŒã«ã«å€æ°ïŒåŸªç°å€æ°ïŒãååŸããå¿
èŠããªããªããåŒã³åºããéããå¿
èŠæ§ïŒç¹°ãè¿ã颿°ïŒãå¢å ãããšãšãã«ããããã«ãã
transition.each
ã³ãã³ããå¿
èŠã«ãªããŸãïŒ
åå4.çè§£ã§ããªã決å®ã¯æ±ºå®ã§ã¯ãªã
ããã¯ãåé¡ã解決ããæ¹æ³ãããå Žåã§ããããããããã¯éåžžã«è€éã§äžå®å®ãªã®ã§ãããªãã¯ãããèŠã€ããå¯èœæ§ãäœããã»ãšãã©èŠããŠããŸããã ç§ã¯å³æžé€šãæžããŸããããããã§ãç§ã¯åžžã«Googleã«é Œã£ãŠããŸãã
ãŸãããã§ãã
ã±ãŒã¹5.ããã¯ã°ã©ãŠã³ãã§ãã³ã°ã¢ãããã
D3 3.x , . , "" . :
, , , , . , , , "" !
, : , . , .
D3 4.0 . ; . D3 4.0 , , . , .
5.
. , , .
6. selection.interrupt
, . â . , , () .
, . , . , , :

D3 . ,
selection.interrupt
, .
selection.interrupt
D3 3.x , , . â D3 3.x's, , . ( ).
D3 3.x , :
selection .interrupt() // interrupt the active transition .transition(); // pre-empt any scheduled transitions That mostly works. But you can cheat it by scheduling another transition: selection .transition() .each("start", alert); // selection .interrupt() .transition();
, . , , .
D3 4.0,
selection.interrupt
, , . : , .
6.
, , , . , API-, , "". " ."
7.
. D3 4.0 , -. , D3 3.x:
selection.transition() .duration(750) .ease("elastic-out", 1, 0.3);
, :
- 1?
- 0,3?
- , âelastic-outâ ?
- ?
D3 4.0:
selection.transition() .duration(750) .ease(d3.easeElasticOut .amplitude(1) .period(0.3));
1 0,3 , , ,
API , :

, ,
transition.ease
; . D3 4.0 .
7.
, , . . ( ,
context.arc
2D canvas.)
, D3 , . . , .
?
. .
, . . , . , , .
. , . , , D3 , . , , , , !
, D3 D3. , , .. . , -.
. , . . .
. . .
. , .
. , . , . .