ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² D3 / Π₯Π°Π±Ρ
D3.js (ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ D3) ΡΡΠΎ JavaScript-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠ½Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΡΠΈΠ»ΠΈΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ DOM-ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΡΠ° Π·Π°ΠΌΠ΅ΡΠΊΠ° ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΎΠ½Π° ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡΡ Π΄Π»Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΡ Π² Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΡ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ.ΠΠ»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΡΠ°ΡΡΠΈ ΠΏΡΠΈΠ³ΠΎΠ΄ΡΡΡΡ Π·Π½Π°Π½ΠΈΡ JS, HTML ΠΈ CSS.
Π’Π΅ΠΊΡΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ (fluent interface)
D3 ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ fluent interface. ΠΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΎΠ½ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ ΡΠ΅ΠΏΠΎΡΠΊΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ Π²Π΅ΡΠ½ΡΠ» ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄. Π§ΡΠΎΠ±Ρ ΠΊΠΎΠ΄ Π±ΡΠ»ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠΈΡΠ°ΡΡ, ΠΊΠ°ΠΆΠ΄ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΡΡΡΠΎΡΠΊΠ΅:
d3.select('body') // Π²ΡΠ±ΠΎΡ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ body
.append('svg') // Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² body svg-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°
.append('text') // Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² svg-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° text
.text('Click somewhere, please...') // ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ° Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ text
.
attr('x', 50) // Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° text
.attr('y', 50)
.style("fill","firebrick") // Π·Π°Π»ΠΈΠ²ΠΊΠ° ΡΠ΅ΠΊΡΡΠ° ΡΠ²Π΅ΡΠΎΠΌ
ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° jsfiddle.net
ΠΡΠ±ΠΎΡΠΊΠ°
Π D3, ΠΊΠ°ΠΊ ΠΈ Π² Π΄ΡΡΠ³ΠΈΡ JS-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ , ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Ρ DOM-ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠΌ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²ΡΠ±ΠΎΡΠΊΠΈ β ΠΎΠ±ΡΡΡΠΊΠΈ Π½Π°Π±ΠΎΡΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΠ½Π° Π΄Π°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π²ΡΠ±ΡΠ°Π½Π½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
ΠΡΠ±ΠΎΡΠΊΠ° (selection) Π² D3 ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² d3.select() ΠΈ d3.selectAll(). ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²ΡΠ±ΠΎΡΠΊΠΈ D3 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ querySelector/querySelectorAll ΠΈΠ»ΠΈ Sizzle, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΡΠ½ ΠΊ ΡΡΡΠ°Π½ΠΈΡΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ jQuery).
d3.select('span') // Π²ΡΠ±ΠΎΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ span Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅
d3.selectAll('span') // Π²ΡΠ±ΠΎΡ Π²ΡΠ΅Ρ
span Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅
ΠΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ Π²ΡΠ±ΠΎΡΠΊΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²ΡΠ±ΠΎΡΠΊΠΈ ΠΈΠ· ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ² (subselection).
<span>Π±ΡΠ΄Π΅Ρ Π·Π΅Π»Π΅Π½ΡΠΌ</span>
<p>
<span>Π±ΡΠ΄Π΅Ρ ΠΊΡΠ°ΡΠ½ΡΠΌ</span>
<span>ΡΡΠΈ</span>
<span>Π±ΡΠ΄ΡΡ</span>
<span>ΠΆΡΠ»ΡΡΠΌΠΈ</span>
</p>
<p>ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΡΡΡΠ½ΡΠΌ</p>
d3.select('span') // Π²ΡΠ±ΠΎΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ span Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ .style('color', 'darkgreen') // ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ²Π΅ΡΠ° d3.selectAll('p') // Π²ΡΠ±ΠΎΡ Π²ΡΠ΅Ρ ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠΎΠ² .selectAll('span') // Π²ΡΠ±ΠΎΡ Π²ΡΠ΅Ρ span Π² ΡΡΠΈΡ ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠ°Ρ . .style('color', 'goldenrod') // ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ²Π΅ΡΠ° d3.select('p') // Π²ΡΠ±ΠΎΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠ° Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ .select('span') // Π²ΡΠ±ΠΎΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ span Π² ΡΡΠΎΠΌ ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠ΅ .style('color', 'firebrick') // ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ²Π΅ΡΠ°
ΠΡΠ΅Π³Π΄Π° ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, Ρ ΠΊΠ°ΠΊΠΎΠΉ Π²ΡΠ±ΠΎΡΠΊΠΎΠΉ Π²Ρ ΡΠ΅ΠΉΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅. Π Π°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ D3: Π²ΡΠ·ΠΎΠ² Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅-ΠΏΠΎΡΠΎΠΌΠΊΠ΅ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΈ ΠΏΠΎΠΏΡΡΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ (ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π΅ΡΡ Π½Π΅ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ) ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ (selection.style(name[, value])), Π΄Π°Π»ΡΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ.
ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈ ΡΡΠ½ΠΊΡΠΎΡΡ
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ DOM D3 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡ
ΠΎΠΆΠΈΠΉ API Π΄Π»Ρ Π²ΡΠ΅Ρ
Π²ΡΠ·ΠΎΠ²ΠΎΠ².
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±Π΅ΡΡΠΌ Π΅Π³ΠΎ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π²ΡΠ±ΠΎΡΠΎΠΊ:
- selection.classed(name, value) Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΊΠ»Π°ΡΡ name Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π±ΡΠ»Π΅Π²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ value.
- selection.on(event, callback) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΡ event (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Β«clickΒ») ΠΈ ΡΡΠ½ΠΊΡΠΈΡ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ callback. Π€ΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Π² this, Π° ΡΠ°ΠΊΠΆΠ΅ data ΠΈ index Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°Ρ . Π‘ΠΎΠ±ΡΡΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ d3.event. ΠΠΎΠ²ΡΠΎΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π·Π°ΠΌΠ΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ.
var pressed = false
var button = d3.select('button') // Π²ΡΠ±ΠΎΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ
.on('click', function (data, index) { // ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π½Π°ΠΆΠ°ΡΠΈΡ ΠΌΡΡΠΈ
button.classed('pressed', pressed = !pressed) // Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ ΠΌΠ΅Π½ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡ
})
ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° jsfiddle.net
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠΎΡ
ΡΠ°Π½ΡΠ½Π½ΠΎΠΉ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ button Π²ΡΠ±ΠΎΡΠΊΠΎΠΉ: Π²ΡΠ·ΠΎΠ²Ρ on (Π° ΡΠ°ΠΊ ΠΆΠ΅ classed, attr, style, property, html, text) Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π²ΡΠ±ΠΎΡΠΊΡ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ΠΈ Π²ΡΠ·Π²Π°Π½Ρ, ΡΡΠΎ ΡΠΈΠΏΠΈΡΠ½ΠΎ Π΄Π»Ρ Β«ΡΠ΅ΠΊΡΡΠΈΡ
Β» ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ².
D3 ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡ
ΠΎΠΆΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΡΠ»ΠΈ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ [value], ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ ΡΠ΅ΡΡ ΠΈΠ΄ΡΡ ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ:
- ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠ΄Π°Π΄ΠΈΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠ²Π»ΡΡΡΠ΅Π΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, ΠΎΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ΠΎ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ data, index (ΡΠΌ. Π½ΠΈΠΆΠ΅), Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ (ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ this) Π±ΡΠ΄Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, DOM-ΡΠ·Π΅Π».
- ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠ΄Π°Π΄ΠΈΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π½Π΅ ΡΠ²Π»ΡΡΡΠ΅Π΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, ΠΎΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΡΠ½ΡΡΠΎ Π² Β«ΡΡΠ½ΠΊΡΠΎΡΒ» (ΡΡΠ½ΠΊΡΠΈΡ, Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅)
- ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΏΠΎΠ΄Π°Π΄ΠΈΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ getter ΠΈ Π²Π΅ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΠ΄ΡΡ ΡΠ΅ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, selection.style(‘color’) Π²Π΅ΡΠ½ΡΡ ΡΠ²Π΅Ρ ΡΠ΅ΠΊΡΡΠ°, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π΄Π»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°).
Π ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ Π½ΡΠ°Π½ΡΠ΅ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΡΡΠΎΠΈΡΠ΅ ΡΠ΅ΠΏΠΎΡΠΊΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² (ΡΠ°ΠΊΠΎΠΉ getter ΠΎΠ±ΡΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΡΠ΅ΠΏΠΎΡΠΊΠΈ).
ΠΠ°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² Π²ΡΠ±ΠΎΡΠΊΠ΅, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ D3 ΠΎ Π½ΠΈΡ
Β«Π·Π°Π±ΡΠ²Π°Π΅ΡΒ». ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π½Π°Π±ΠΎΡΠ΅ Π΄Π°Π½Π½ΡΡ
ΠΈΠ»ΠΈ ΡΠΎΠ±ΡΡΠΈΡ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ Π½Π΅ Π·Π°ΡΡΠ°Π²ΡΡ D3 Β«ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΡΒ» Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½ΡΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°ΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ Π²ΡΡΠ΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ Ρ classed.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ (data ΠΈ index). ΠΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: index β Π½ΠΎΠΌΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² Π²ΡΠ±ΠΎΡΠΊΠ΅, Π° data β Π·Π°Π΄Π°Π½Π½ΡΠΉ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠΈΡΡΡΡΡΠ²ΠΈΠ΅ ΡΡΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠΉ Π½Π° Π²ΡΠ±ΠΎΡΠΊΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡΠΈΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠ² Π² D3. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΈΡΠ°ΡΡ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΡΠΉ ΠΊΠΎΠ΄, Π²ΡΡΠΈΡΠ»ΡΡΡΠΈΠΉ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π΄Π°Π½Π½ΡΡ .
Π’ΠΈΠΏΠΈΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° Ρ Π²ΡΠ±ΠΎΡΠΊΠΎΠΉ
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΡ Ρ DOM-ΡΠ·Π»Π°ΠΌΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° ΡΠ΅ΡΠ΅Π· Π²ΡΠ±ΠΎΡΠΊΡ:
var svg = d3.select('body').append('svg')
svg
.append('text')
.text('click somewhere')
.attr('x', 50)
.attr('y', 50)
var events = []
svg.on('click', function () {
events.push(d3.event)
if (events.length > 5) events.shift()
var circles = svg.selectAll('circle')
.data(events, function (e) { return e.timeStamp })
.attr('fill', 'gray')
circles
.enter()
.
append('circle')
.attr('cx', function (d) { return d.x || d.pageX })
.attr('cy', function (d) { return d.y || d.pageY })
.attr('fill', 'red')
.attr('r', 10)
circles
.exit()
.remove()
})
ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° jsfiddle.net
- ΠΠ΅ΡΠΎΠ΄Ρ selection.html() ΠΈ selection.text() Π·Π°Π΄Π°ΡΡ ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² Π²ΠΈΠ΄Π΅ HTML ΠΈΠ»ΠΈ ΡΠ΅ΠΊΡΡΠ°.
- ΠΠ΅ΡΠΎΠ΄Ρ selection.style(), selection.attr() ΠΈ selection.property() Π·Π°Π΄Π°ΡΡ ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ CSS-ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Π΅Π³ΠΎ Π°ΡΡΡΠΈΠ±ΡΡΡ ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°. Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ style ΠΈ attr, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΡΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΠ²ΠΎΠΉΡΡΠ² Π½ΠΎΠ²ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
- ΠΠ΅ΡΠΎΠ΄ selection.remove() ΡΠ΄Π°Π»ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π²ΡΠ±ΠΎΡΠΊΠΈ.
- selection.append() Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΌΠΊΠ° ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π²ΡΠ±ΠΎΡΠΊΠΈ.
- ΠΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ Π² selection.data() Π΄Π°Π½Π½ΡΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ Π² ΠΏΠΎΠ»Π΅ __data__ DOM-ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π½Π° Π²ΡΠ±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΈΡ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
- ΠΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΎΠ΄ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ selection.
datum().
Π‘Π²ΡΠ·Π°Π½Π½ΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΎΡΠΎΠ±ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ data(). Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π²ΡΠ±ΠΎΡΠΊΡ, Ρ ΡΠ°Π½ΡΡΡΡ ΠΏΠΎΠΌΠΈΠΌΠΎ ΡΠΏΠΈΡΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ. Π ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π΅ ΡΡΠ°ΡΡΠΈ Thinking with Joins ΠΌΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°Ρ enter() ΠΈ exit() ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΡΡ Ρ ΡΠ°ΠΊΠΎΠΉ Π²ΡΠ±ΠΎΡΠΊΠΈ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ Π΄Π°ΡΡ.
ΠΠ½ΠΈΠΌΠ°ΡΠΈΡ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°
ΠΠ½ΠΈΠΌΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² D3 Π»Π΅Π³ΠΊΠΎ, Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ selection.transition(). ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ±ΠΎΡΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π° Π½ΠΎΠ²ΡΠ΅, ΡΠΎΠ·Π΄Π°Π²Π°Ρ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΡΡΠ΅ΠΊΡ. ΠΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ Π·Π°Π΄Π°ΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ transition.duration().
ΠΠΎΠ±Π°Π²ΠΈΠΌ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ:
var svg = d3.select('body').append('svg')
svg
.append('text')
.text('click here')
.attr('x', 50)
.attr('y', 50)
var events = []
svg.
on('click', function () {
events.push(d3.event)
if (events.length > 5) events.shift()
var circles = svg.selectAll('circle')
.data(events, function (e) { return e.timeStamp })
.attr('fill', 'gray')
circles
.enter()
.append('circle')
.attr('cx', function (d) { return d.x || d.pageX })
.attr('cy', function (d) { return d.y || d.pageY })
.attr('fill', 'red')
.attr('r', 0) // ΠΠ°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
.transition()
.duration(1000) // ΠΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Π° ΠΎΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌΡ
.attr('r', 10) // ΠΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
circles
.exit()
.transition()
.attr('r', 0)
.remove()
})
ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° jsfiddle.net
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ ΡΠ°ΡΡΠΊΠ°Π·Π°Π» ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ D3 ΠΏΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π²ΡΠ±ΠΎΡΠΊΠ°ΠΌΠΈ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°ΠΌΠ΅ΡΠΊΠΈ ΠΏΠ»Π°Π½ΠΈΡΡΡ ΠΏΠΎΡΠ²ΡΡΠΈΡΡ ΡΡΠΈΠ»ΠΈΡΠ°ΠΌ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄Π°Π½Π½ΡΡ , ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π°Π±ΠΎΡΠΎΠ² SVG-ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ.Π― ΠΏΡΠ΅ΠΏΠΎΠ΄Π°Ρ D3 Π½Π° ΠΊΡΡΡΠ΅ Β«ΠΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ Β». ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΡΠ²ΠΎΠΈΡΡ ΡΡΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΈ Π½Π°ΡΠ°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΅Π³ΠΎ Π² ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅, ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΠ΅ ΠΊ Π½Π°ΠΌ. ΠΠ»ΠΈΠΆΠ°ΠΉΡΠΈΠΉ ΠΊΡΡΡ ΠΏΡΠΎΠΉΠ΄ΡΡ Π² ΠΠΎΡΠΊΠ²Π΅ Π² ΡΡΠΈ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅, Π·Π°ΠΏΠΈΡΡ ΠΈ ΠΎΡΠ·ΡΠ²Ρ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² ΡΠ½Π²Π°ΡΡΠΊΠΎΠ³ΠΎ ΠΊΡΡΡΠ°: http://brainwashing.pro/dataviz.
ΠΡΡΡΡΠΎ ΠΎ Π³Π»Π°Π²Π½ΠΎΠΌ: Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ D3.js | by Jenny V | NOP::Nuances of Programming
D3, ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΠΎ ΠΎΡ Data-Driven Documents, β ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° JavaScript, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΡΠ°ΠΌΡΠΌΠΈ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ ΠΈ ΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ DOM.
D3 Π½Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠ°Π·ΡΡΠ΄Ρ ΡΠΈΠΏΠΈΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π³ΡΠ°ΡΠΈΠΊΠΎΠ² ΠΈ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌ. ΠΠ½Π° ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅ΠΉ Π³ΠΈΠ±ΠΊΠΎΡΡΡΡ ΠΈ ΡΡΠΈΠ»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ Recharts, C3js ΠΈ Raw graphs. ΠΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ: ΡΠ°ΠΌ, Π³Π΄Π΅ ΠΎΠ±ΡΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ΅ΡΠΏΠΈΡ ΡΠΈΠ°ΡΠΊΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ²Π»Π΅ΠΊΠ°Π΅ΡΠ΅ΡΡ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΠΌΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ, D3 ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ
Π ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌΡΡ Ρ D3 Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ
ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ². ΠΠ±ΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΡΠ°ΠΏΠ°ΠΌ: Π·Π°Π³ΡΡΠ·ΠΊΠ° Π΄Π°Π½Π½ΡΡ
β Π²ΡΠ±ΠΎΡΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² β ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° Π΄Π°Π½Π½ΡΡ
β ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅/ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅/ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
ΠΠΎ ΠΏΡΠ΅ΠΆΠ΄Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΈΡΡΠ΅ΠΌ Π½Π° Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΈ ΠΏΠΎΠΏΡΠ°ΠΊΡΠΈΠΊΡΠ΅ΠΌΡΡ Π² ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠΎΠ² ΠΈ ΡΠΈΠ³ΡΡ ΡΠ°Π·Π½ΡΡ ΡΠ²Π΅ΡΠΎΠ².
Π ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΡΡ ΡΠΈΠ³ΡΡ
ΠΠ°ΠΊ ΠΆΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ D3? ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π΅ΠΌ HTML-ΡΡΡΠ°Π½ΠΈΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΏΡΡΡΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ SVG (Π°Π±Π±ΡΠ΅Π²ΠΈΠ°ΡΡΡΠ° ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ·ΡΠΊ ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΠΉ Π²Π΅ΠΊΡΠΎΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠΈ). ΠΠ»Ρ ΡΠ΅Ρ ΠΊΡΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ, SVG β ΡΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎΡΡΠΎΡΡΠ΅Π΅ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΈΠ³ΡΡ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ΅ΠΌΡ ΠΎΠ½ΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Ρ ΠΎΡΠΎΡΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΡΠΌ. ΠΠ°ΠΊ ΡΠ°Π· Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΊΠΈΡ ΡΠΈΠ³ΡΡ ΠΈ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ D3.
Π‘Π½Π°ΡΠ°Π»Π° Π΄Π»Ρ ΠΈΠΌΠΏΠΎΡΡΠ° D3 ΡΠΎΠ·Π΄Π°Π΅ΠΌ HTML-Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ, Ρ ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π²ΡΠ΅ΠΉ ΡΡΠ°ΡΡΠΈ. Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ ΡΠ΅Π³Π°ΠΌΠΈ ΡΠΊΡΠΈΠΏΡΠ°.
Π ΡΡΡΠΎΠΊΠ΅ 4 ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ D3. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ frontend-ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Ρ Node.js, ΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ NPM. Π ΡΡΡΠΎΠΊΠ΅ 7 ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½Ρ SVG, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ΄Π΅ΠΌ ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠ³ΡΡΡ.
ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° D3:
Π ΡΡΡΠΎΠΊΠ΅ 2 Π·Π°Π΄Π΅ΠΉΡΡΠ²ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ d3.select(). ΠΠ½ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΊΠ°ΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Ρ CSS-ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π»ΠΈ Π² ΡΡΠ½ΠΊΡΠΈΡ.
Π ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ΅Π³ <svg>, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ Π²Π΅ΡΠ½Π΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠΌΠ΅ΡΡΠΈΠΉΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ SVG.
ΠΠΎΠ·ΠΆΠ΅ ΠΎΠ±ΡΠ°ΡΠΈΠΌΡΡ ΠΊ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ d3.selectAll(), ΠΊΠΎΡΠΎΡΡΠΉ Π²Π΅ΡΠ½Π΅Ρ Π½Π΅ ΠΎΠ΄ΠΈΠ½, Π° Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ CSS-ΡΠ΅Π»Π΅ΠΊΡΠΎΡΡ.
Π ΡΡΡΠΎΠΊΠ΅ 4 ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ SVG Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ βcircleβ (ΠΊΡΡΠ³). ΠΠΎΠΌΠΈΠΌΠΎ Π½Π΅Π³ΠΎ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ°ΡΠΏΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π΅ΡΡΡ Π΅ΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π½ΡΡ
ΡΠΈΠ³ΡΡ. Π ΡΡΡΠΎΠΊΠ΅ 5 ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠ΅ΠΏΠΎΡΠΊΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² D3, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΈΠ·Π±Π°Π²Π»ΡΠ΅Ρ ΠΎΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠΈΡΠ°ΡΡ svg.function(...) Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅.
Π ΡΡΡΠΎΠΊΠ°Ρ
5, 6, 7 ΠΈ 8 ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π°ΡΡΠΈΠ±ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ d3.attr, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΡΡΡΡΡ Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΠ³ΡΡΡ. cx ΠΈ cy β ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ x ΠΈ y ΡΠ΅Π½ΡΡΠ° ΠΊΡΡΠ³Π°; r β ΡΠ°Π΄ΠΈΡΡ; fill β ΡΠ²Π΅Ρ Π·Π°Π»ΠΈΠ²ΠΊΠΈ. ΠΡΠΎ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ. Π‘ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΈΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΠΎΡΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Π½Π° freeCopeCamp.
ΠΡΠ°ΠΊ, Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΡΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
ΠΡΠΎ-ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ Π·Π΄Π΅ΡΡ Π½Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΠ³ΠΎ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»Ρ ΡΠ΅Π±Π΅ Π½Π΅ ΡΠΎΠ³Π»Π°ΡΠΈΡΡΡΡ. ΠΠ°ΠΆΠ΅ ΡΠ°ΠΌΡΠ΅ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΡΡΡΡ ΡΠΈΠ³ΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠΌ:
ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠΈΠ³ΡΡΡ rect ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π½ΡΠΆΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ Π΄Π»Ρ Π΅Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠ°ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
Π‘ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°ΠΌΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠΈΠ³ΡΡ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ, ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ Π²ΠΎΠΏΡΠΎΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌ Π½Π° ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π΅.
ΠΠ°Π³ΡΡΠ·ΠΊΠ° Π΄Π°Π½Π½ΡΡ
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π½ΡΡ
ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ
Π² D3 ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ°ΡΠ½Π΅ΠΌ Ρ ΡΠ°ΠΌΡΡ
ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ
: d3.json('...'), d3.csv('...') ΠΈ d3.xml('...').
ΠΠ»Ρ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΡΠ΅Π»ΠΈ Π²ΡΠ΅ ΠΈΠ· Π½ΠΈΡ
ΠΏΡΠ΅Π΄ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Fetch. CSV, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ JSON ΠΈ XML, Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
Π ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΡΠ°Π·Π΄Π΅Π»Π°Ρ
ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ Π΄Π°Π½Π½ΡΡ
(socialnetwork.) ΠΈΠ· Π²ΡΠΌΡΡΠ»Π΅Π½Π½ΠΎΠΉ ΡΠΎΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈ ΠΈ ΡΡΠΈΠ»ΡΠΌΠΈ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΌΠΈ Π½ΠΈΠΆΠ΅:
json
Π‘Π½Π°ΡΠ°Π»Π° ΠΏΠΎΡΡΡΠΎΠΈΠΌ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΠΌ Π³ΠΎΠ΄Ρ (years), Π° ΠΏΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ β ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² (comments). ΠΠ»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ d3.axisBottom() ΠΈ d3.axisLeft(). Π ΠΊΠΎΠ΄Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠ° Π΄Π°Π½Π½ΡΡ
ΠΈ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠ΅ΠΉ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°! ΠΠ΅Π· ΠΏΠ°Π½ΠΈΠΊΠΈ, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΡΡΠΎΠΊΡ ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ.
Π ΡΡΡΠΎΠΊΠ΅ 3 ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ JSON. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ d3.json() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΠΎΠΌΠΈΡ, Π½Π°ΠΌ Π½Π΅ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ Π±Π΅Π· .then() ΠΈΠ»ΠΈ await, ΡΡΠΎΠ±Ρ Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ, Π² ΡΡΡΠΎΠΊΠ°Ρ
5 ΠΈ 10 ΠΏΡΠΈΡΡΡΠΏΠ°Π΅ΠΌ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ³ΡΠ°ΡΡ Π²Π°ΠΆΠ½ΡΡ ΡΠΎΠ»Ρ Π² ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ΅ Π΄Π°Π½Π½ΡΡ
. ΠΠΎΠΏΡΡΡΠΈΠΌ, ΠΌΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΠΊ Ρ 2015 ΠΏΠΎ 2020 Π³ΠΎΠ΄ ΠΏΡΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΈ 500 Ρ
500 ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ. ΠΡΠΈ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° Π³ΠΎΠ΄Π° Π½Π° ΠΎΡΠΈ x Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΡΡ 2015β2020 Π² 0β500.
Π‘Π°ΠΌΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ
, .scaleLinear(), Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΡΠΈΡΠ΅Π» (domain) Π² Π΄ΡΡΠ³ΠΎΠΉ (range). Π ΡΡΡΠΎΠΊΠ΅ 7 ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ (range)[100,800], ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΠ°ΡΡ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ Ρ 100-Π³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΏΠΎ ΠΎΡΠΈ x, Π° Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡ Π½Π° 800-ΠΌ.
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π²Ρ
ΠΎΠ΄Π½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ (domain), ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ. .domain() ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ. Π ΡΡΠ°ΡΡΡΡ, Ρ D3 Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ d3.extent(), d3.max() ΠΈ d3.min(). Π ΡΡΡΠΎΠΊΠ΅ 8 ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ minimum of years β 1 ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ maximum of years + 1. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΎΡΡΠ΅Π½ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎΠ»Π±ΡΡ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π ΡΡΡΠΎΠΊΠ΅ 13 Π΄Π΅Π»Π°Π΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π΄ΡΡΠ³ΠΎΠΌΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΡΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ 0, Π° Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π². ΠΠ°ΡΠ° Π·Π°Π΄Π°ΡΠ° β ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ 0 Π΄ΠΎ 150, Π° Π½Π΅ ΠΎΡ 50 Π΄ΠΎ 150.
d3. Π²Π΅ΡΠ½Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
extent()[max, min], ΠΈΠ·Π±Π°Π²Π»ΡΡ ΠΎΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΈΡ
ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΡΠΈΡΡΡΠΏΠ°Π΅ΠΌ ΠΊ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠΈ: Π² ΡΡΡΠΎΠΊΠ΅ 15 Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΎΡΡ x. Π ΡΠ΅Π»ΡΡ
ΡΡΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ Π΅ΠΉ ΠΊΠ»Π°ΡΡ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½Ρ g, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΡΡ x Π²ΡΠ΅Π³Π΄Π° ΡΠΈΡΡΠ΅ΡΡΡ ΠΈΠ· Π½Π°ΡΠ°Π»Π° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π² Π²Π΅ΡΡ
Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡΠ³Π»Ρ. ΠΠΎΡΡΠΎΠΌΡ ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ g Π½Π° Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»Ρ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ .call(d3.axisBottom(x).tickFormat(d3.format("d")). Π€ΡΠ½ΠΊΡΠΈΡ .axisBottom ΡΠΈΡΡΠ΅Ρ ΠΎΡΡ. (ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π»ΠΈ Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΡ range, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½Π° Π·Π½Π°Π΅Ρ, Π² ΠΊΠ°ΠΊΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ range/domain Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ). ΠΠ°ΡΠ΅ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ .tickFormat() ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ D3, ΠΊΠ°ΠΊ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π° ΠΎΡΠΈ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ "d" Π΄Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΡΡΡ
ΡΠΈΡΠ΅Π» Π² ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π΅ ΠΎΡ 2014 Π΄ΠΎ 2021.
ΠΠ°Π»Π΅Π΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ Π΄Π»Ρ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΎΡΠΈ y, ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅Π½ΡΠ΅ΠΌ Π°ΡΡΠΈΠ±ΡΡ transform, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ ΡΡΡ ΠΎΡΡ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π΅Π»Π΅Π½ΠΈΠΉ.
ΠΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
ΠΡΠ±ΠΎΡΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° Π΄Π°Π½Π½ΡΡ
ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΈΡΠ»Π° ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π². Π‘ ΡΡΠΎΠΉ ΡΠ΅Π»ΡΡ ΠΏΡΠΎΠ²Π΅Π΄Π΅ΠΌ Π²ΡΠ±ΠΎΡΠΊΡ SVG ΠΈ ΠΏΡΠΈΠ²ΡΠ·ΠΊΡ Π΄Π°Π½Π½ΡΡ . ΠΠΈΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
Π‘Π½Π°ΡΠ°Π»Π° Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ d3.select() Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ SVG. (ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°Ρ
ΠΊΠΎΠ΄Π° ΠΌΡ Π΅Π΅ ΡΠΎΡ
ΡΠ°Π½ΠΈΠ»ΠΈ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ svg). ΠΠ°ΡΠ΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠ° CSS selector .barchartrectangle ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠΌ ΠΏΠΎΠΈΡΠΊ ΠΈ ΠΎΡΠ±ΠΈΡΠ°Π΅ΠΌ Π²ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ: Π΅ΡΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΈΠΌΠ΅ΡΡΠΈΠ΅ΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ Π΄Π»Ρ ΠΈΡ
ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²ΠΊΠΈ Π»ΠΈΠ±ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ.
ΠΠ°Π»Π΅Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ .data(), ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ data, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΡΠΈ ΡΡΠΎΠΌ Π²ΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠ»ΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π΅ΠΌΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ (item) ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ (index).
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ.
ΠΠ΄Π½Π°ΠΊΠΎ, ΠΊΠ°ΠΊ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π΄Π»Ρ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠ΅Ρ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ/ΡΠ΄Π°Π»Π΅Π½ΠΈΡ/Π²ΡΡΠ°Π²ΠΊΠ΅. ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° id Π² Π΄Π°ΡΠ°ΡΠ΅ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ (item, index)=> item.id.
ΠΡΠ°ΠΊ, ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΌΡ Π½Π°ΡΡΠΈΠ»ΠΈΡΡ, ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ².
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²
ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΡΠ΅ΠΌ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ), D3 ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΈ ΡΠ΅ΡΠ°Π΅Ρ, ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ.
ΠΠ΄Π΅ΡΡ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ 2 Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ .enter() ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ .exit().
ΠΠΎΠ½ΡΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄Π°Π½Π½ΡΡ
[1,2,3] ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°.
Π‘Π΅Π»Π΅ΠΊΡΠΎΡ .barchartrectangle Π²Π΅ΡΠ½Π΅Ρ 0 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ D3 Π² ΠΊΡΡΡΠ΅, ΡΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΡΠ²Π»ΡΡΡΡΡ ΡΡΠ΅ΠΌΡ Π½ΠΎΠ²ΡΠΌΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
.
Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΎΠ½Π° Π·Π°Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡΠ΅ Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ .enter(). Π Π½Π΅ΠΉ ΠΌΡ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠ΅ rect ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ Π½ΠΎΠ²ΠΎΠΌΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ Π΄Π°Π½Π½ΡΡ
ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ ΠΈΠΌ ΠΊΠ»Π°ΡΡ barchartrectangle. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ βΡΠ΄Π°Π»Π΅Π½ΠΈΠΉβ Π½Π΅Ρ, ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ .exit() Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π°.
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° Π½Π° [1,2] ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° ΡΠ΅Π»Π΅ΠΊΡΠΎΡ .barchartrectangle Π²Π΅ΡΠ½Π΅Ρ ΡΡΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΠ΄Π½Π°ΠΊΠΎ D3 ΠΎΡΠΌΠ΅ΡΠΈΡ Π½Π°Π»ΠΈΡΠΈΠ΅ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²ΡΡ
. Π’ΠΎΠ³Π΄Π° ΠΎΠ½Π° Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΌΠΈ Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ .exit(), ΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ΄Π°Π»ΠΈΡ .remove() ΡΡΠ΅ΡΠΈΠΉ ΠΈΠ· Π½ΠΈΡ
.
ΠΠ°ΠΊ D3 ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ΄Π°Π»ΡΡΡ? ΠΡΠΎ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠ»ΡΡΠ° Π΄Π°Π½Π½ΡΡ
, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π½Π΅Π΅. Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΠΌ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ ΡΠ΄Π°Π»ΠΈΡ ΡΡΠ΅ΡΠΈΠΉ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. ΠΠΎ Π΅ΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΎΠΊΠ°Π·Π°Π»ΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ id (item, index)=> item, ΠΈ ΠΌΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ² Π½Π° [1,3], ΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»Π΅Π½ Π²ΡΠΎΡΠΎΠΉ barchartrectangle.
Π Π°Π±ΠΎΡΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ .enter() ΠΈ .exit() ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ½ΡΡΠ½Π°, ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ ΠΊ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π ΡΡΡΠΎΠΊΠ΅ 4 ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ .enter() ΠΈ ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΡΠ΅ΠΌ D3, ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ. Π ΡΡΡΠΎΠΊΠ΅ 5 Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠΉ rect ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ. ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ Π² ΡΡΡΠΎΠΊΠ°Ρ
6 ΠΈ 7, ΡΡΠ½ΠΊΡΠΈΡ .attr() ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΈ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈ Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΡΠΈΡΠΎΠ²ΡΠ²Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π΄Π°Π½Π½ΡΡ
.
Π‘Π½Π°ΡΠ°Π»Π° Π² ΡΡΡΠΎΠΊΠ΅ 6 ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ x ΠΏΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ x, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΠ°Π½Π΅Π΅ Ρ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ Π³ΠΎΠ΄Π°. Π ΠΎΡΠ²Π΅Ρ Π²Π΅ΡΠ½Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΈΠΊΡΠ΅Π»Ρ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π°Π»Π΅Π΅ ΡΠΈΡΠΈΠ½Π° Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° ΠΊΠ°ΠΊ 100, ΡΠΎ ΠΌΡ ΠΏΠΎΠ΄ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΡΡΠΎΠ»Π±Π΅Ρ ΠΊ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΡΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π²ΡΠΏΠΎΠ»Π½ΡΡ -50. ΠΠ»Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ y ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π ΡΡΡΠΎΠΊΠ΅ 9 Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π²ΡΡΠΎΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ 800- y(item. ΠΈΠ·-Π·Π° ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΏΠΎΠΌΠ½Ρ, ΡΡΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π±ΡΠ» ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ
comments)[800, 100], ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠ°Π»ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² Π±ΡΠ΄ΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π² Π±ΠΎΠ»ΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ. Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΡΠΈΠΌ ΠΌΡ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΠΌ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π²ΡΠΏΠΎΠ»Π½ΡΡ 800 β y(item.comments).
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π΄Π»Ρ ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π·Π°Π΄Π°Π΅ΠΌ ΡΠΈΠ½ΠΈΠΉ ΡΠ²Π΅Ρ Π·Π°Π»ΠΈΠ²ΠΊΠΈ. ΠΡΠΎΠ³ΠΎΠ²ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
ΠΡΠ»ΠΈΡΠ½ΠΎ! ΠΠ° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄Π°Π½Π½ΡΡ ΠΌΡ ΠΎΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ Π½Π° ΡΠΊΡΠ°Π½Π΅ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π ΡΡΠΎΠΌ ΠΈ ΡΠΎΡΡΠΎΠΈΡ Π²ΡΡ ΡΡΡΡ D3. ΠΠΎ Ρ Π½Π΅Π΅ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ. ΠΠ° D3.js β Data-Driven Documents (d3js.org) Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΌΠΈ Π³ΡΠ°ΡΠΈΠΊΠ°ΠΌΠΈ ΠΈ ΡΠΈΠ³ΡΡΠ°ΠΌΠΈ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π’Π΅ΠΏΠ΅ΡΡ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΎΠ±ΡΠ΅Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ D3. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠ³ΡΡΡ Π² SVG Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ .
Π Π²ΠΏΠ΅ΡΠ΅Π΄ΠΈ Π΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ: Π³Π΅ΠΎΠΊΠ°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ HTML, Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΡΠ΅Π²ΡΡ
ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΈ Ρ.Π΄. D3 ΡΠ΅Π½Π½Π° ΠΏΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΡΡΠΈ Π±Π΅Π·Π³ΡΠ°Π½ΠΈΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π²Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ.
Π§ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΊΠΆΠ΅:
- notebookJS: JavaScript ΠΈ D3 Π² Jupyter Notebook
- ΠΠΎΡΠ΅ΠΌΡ Ρ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡ D3.js
- Π’ΠΠ-25 Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ React 2021β2022: Π½ΠΎΠ²ΡΠ΅, ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅, Π½ΠΎ ΠΌΠ°Π»ΠΎΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ JavaScript
Π§ΠΈΡΠ°ΠΉΡΠ΅ Π½Π°Ρ Π² Telegram, VK ΠΈ Π―Π½Π΄Π΅ΠΊΡ.ΠΠ·Π΅Π½
d3-hierarchy / D3 / Observable
ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ 2D ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ .
Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ 1-30 ΠΈΠ· 32 ΡΠΏΠΈΡΠΊΠΎΠ²
D3. ΠΡΡΠΏΠΏΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ
D3 β’ FIL
15 ΡΠ΅Π½ΡΡΠ±ΡΡ 2020 Π³. β’
54
4
Π‘Π»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ
D3 β’ Mike Bostock
Secp 29, Secp 29. 2018β’
36
ΠΠ±Ρ ΠΎΠ΄ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ, Π°Π½ΠΈΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ
D3β’Fil
6 ΠΈΡΠ»Ρ 2020 Π³.β’
21
Bilevel Edge Bundling
ΠΡΠ° Π·Π°ΠΏΠΈΡΠ½Π°Ρ ΠΊΠ½ΠΈΠΆΠΊΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ FORKD3 β’ Mike Bostock
24 ΠΌΠ°Ρ 2018 Π³.
β’
33
Π‘ΠΠΠΠΠΠΠ«Π ΠΠΠ ΠΠΠ
ΠΡΠ° Π½ΠΎΡΡΠ±ΡΠΊ — FOKD3 β’ Mike Bostock
1, 2020 β’
90
ΠΡΠ° Π·Π°ΠΏΠΈΡΠ½Π°Ρ ΠΊΠ½ΠΈΠΆΠΊΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ FORKD3 β’ Mike Bostock
Dec 30, 2019 β’
86
ΠΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π³ΡΠ°Π΄
ΠΡΠ° Π½ΠΎΡΡΠ±ΡΠΊΠ° — BOSKD3 β’ Mike Bostock
9 000, 2019 β’
99
. ΠΡΠ°ΡΠΈΠΊ
D3β’Mike Bostock
Jan 7, 2019β’
42
d3.packEnclose
D3β’Mike Bostock
May 26, 2017β’
56
Hierarchical Bar Chart
D3β’Mike Bostock
5 ΠΈΡΠ»Ρ 2019 Π³.
β’
116
, Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ΅ Π½Π° ΡΠΈΠ»ΠΎΠ²ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ
ΠΡΠ° Π·Π°ΠΏΠΈΡΠ½Π°Ρ ΠΊΠ½ΠΈΠΆΠΊΠ°-ΡΡΠΎ Π²ΠΈΠ»ΠΊΠ°D3 β’ Mike Bostock
26 ΠΈΡΠ½Ρ 2019 Π³. β’
91
3
D3. Π‘ΡΡΠ°ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ
D3 β’ FIL
14 ΠΈΡΠ½Ρ 2019 Π³. β’
31
ΠΠΎΡΠ΅ΡΠ΅Π½ΠΈΠ΅ D3.Hierarchy
D3 β’ FIL
14 ΠΈΡΠ½Ρ 2019 Π³. β’
24
D3.HIERARCHY ΠΠ°ΠΏΠΈΡΠ½Π°Ρ ΠΊΠ½ΠΈΠΆΠΊΠ° — ΡΡΠΎ Π²ΠΈΠ»ΠΊΠ°
D3 β’ Mike Bostock
10 ΠΌΠ°ΡΡΠ° 10, 2019 β’
22
ΠΠ½ΡΡΡΠ΅Π½Π½ΠΈΠΉ TreeMap
ΠΡΠ° Π½ΠΎΡΡΠ±ΡΠΊ — BostkD3 β’ Mike Bostock
10 ΠΌΠ°ΡΡΠ° 2019 Π³.
β’
38
1 0003
Dreemp ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΡΒ
ΠΡΠΎΡ Π±Π»ΠΎΠΊΠ½ΠΎΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π²ΠΈΠ»ΠΊΡD3 β’ Mike Bostock
10 ΠΌΠ°ΡΡΠ° 2019 Π³. β’
7
Π Π°ΡΡΡΠ½ΡΡΠ°Ρ TreeMap
ΠΡΠ° Π·Π°ΠΏΠΈΡΠ½Π°Ρ ΠΊΠ½ΠΈΠΆΠΊΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π²ΠΈΠ»ΠΊΡD3 β’ Mike Bostock
10 ΠΌΠ°ΡΡΠ° 2019 β’
14
Π‘ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ
D3 β’ Mike Bost Bost Bost Bost Bost Bost Bost Bost Bost Bost Bost Bost Bost Bost Bost Bost Bost Bost Bost Bost Bost Bost Bost Bost Bost.
1 ΠΎΠΊΡΡΠ±ΡΡ 2018 Π³. β’
294
ΠΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΡΠ°Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ
ΠΡΠ° Π·Π°ΠΏΠΈΡΠ½Π°Ρ ΠΊΠ½ΠΈΠΆΠΊΠ° — ΡΡΠΎ Π²ΠΈΠ»ΠΊΠ°D3 β’ Mike Bostock
23 ΠΌΠ°Ρ 2018 β’
183
3
D3 β’ Mike Bostock
26 Π½ΠΎΡΠ±ΡΡ 2018 Π³.
β’
258
Zoomable Sunburst
ΠΡΠ° Π½ΠΎΡΡΠ±ΡΠΊΠ° — Π²ΠΈΠ»ΠΊΠ°D3 β’ Mike Bostock
30 Π°ΠΏΡΠ΅Π»Ρ 2018 β’
390
3
, Sunbure
3
. D3 β’ Mike Bostock
28 Π°ΠΏΡΠ΅Π»Ρ 2018 Π³. β’
139
4
TREEMAP, CSV
D3 β’ Mike Bostock
Dec 28, 2017 β’
126
3
Tree, Radial Tidy
3Tree, Radial Tidy
3
Tree, Radial Tidy
3
Tree, Radial Tidy
3
Tree, Radial Tidy
3
Tree.
β’ ΠΠ°ΠΉΠΊ ΠΠΎΡΡΠΎΠΊ
16 Π½ΠΎΡΠ±ΡΡ 2017 Π³. β’
167
Tree, Cluster
ΠΡΠ° Π·Π°ΠΏΠΈΡΠ½Π°Ρ ΠΊΠ½ΠΈΠΆΠΊΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ForkD3 β’ Mike Bostock
Π΄Π΅ΠΊΠ°Π±ΡΡ 2017 Π³. β’
76
4
Π¦ΠΈΠ»ΡΡΡ. D3 β’ Mike Bostock
30 Π°ΠΏΡΠ΅Π»Ρ 2018 Π³. β’
93
Tree, Tidy
ΠΡΠ° Π·Π°ΠΏΠΈΡΠ½Π°Ρ ΠΊΠ½ΠΈΠΆΠΊΠ° — ΡΡΠΎ Π²ΠΈΠ»ΠΊΠ°D3 β’ Mike Bostock
Dec 28, 2017 β’
169
ΠΡΡΠΆΠ½Π°Ρ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°, Bubble Chart
ΡΡΠΎ Π²ΠΈΠ»ΠΊΠ°D3 β’ Mike Bostock
28 Π΄Π΅ΠΊΠ°Π±ΡΡ 2017 Π³.
β’
112
2
ΠΠΠ ΠΠΠΠ’, Icicle
ΠΡΠ° Π·Π°ΠΏΠΈΡΠ½Π°Ρ ΠΊΠ½ΠΈΠΆΠΊΠ° — ForkD3 β’ Mike Bostock
28 Π°ΠΏΡΠ΅Π»Ρ 2018 β’
33
1 0003
ΠΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅. 1-30 ΠΈΠ· 32 ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ
ΠΠ·Π±ΡΠ°Π½Π½ΡΠ΅ Π°Π²ΡΠΎΡΡ / Observable / Observable
Observable
@observablehq
ProfileNotebooksCollections0003 ΠΡΠ° Π·Π°ΠΏΠΈΡΠ½Π°Ρ ΠΊΠ½ΠΈΠΆΠΊΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ VOK
Helena Oliveira
ΡΠ΅Π½ΡΡΠ±ΡΡ 28
Voronoi Cells
ΠΡΠ° Π½ΠΎΡΡΠ±ΡΠΊΠ° — Π²ΠΈΠ»ΠΊΠ°Ben Simonds
Sep 28 β’
22
Taylor Polynomials
Amit Sch
SEP 28.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Euclidean Rhythms
Torben Jansen
24 ΡΠ΅Π½ΡΡΠ±ΡΡ β’
64
2
ΠΠ°ΡΠ΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠΊΠΈ (15 ΠΌΠΈΠ½ΡΡ) — Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΠ΅ Π¨ΡΠ°ΡΡ
Evan Galloway
Sep 2 β’
5
0003
Marcas Y Canales
ΠΡΠ° Π·Π°ΠΏΠΈΡΠ½Π°Ρ ΠΊΠ½ΠΈΠΆΠΊΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ForkNΓ©stor AndrΓ©s PeΓ±a
ΡΠ΅Π½ΡΡΠ±ΡΡ 14 β’
1
ΠΡΡΠ°Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅
ΠΡΠΎ Π½ΠΎΡΡΠ±ΡΠΊ — FORBGRAB SUSMANN
SEP 5 β’
21
Zoomble
SEP 5 β’
9000 21Zoomble
SEP 5 β’
21
Zoom.
Schudel
Π°Π²Π³ΡΡΡ 18 β’
43
ΠΠΊΠ΅Π°Π½ΡΠΊΠΈΠ΅ ΡΠΎΠΊΠΈ
Tom Macwright
Aug 12 β’
24
MAROPLETH MAP
ΠΡΠΈΡ Π₯Π΅Π½ΡΠΈΠΊ
Aug 26 β’
13
Animated Mapbox Vector Fields (aka Wind Maps)
Corey Guastini
Aug 15β’
35
New Yorkers from Canada to the AmboysΒ
This notebook is a forkBenjamin Schmidt
Jul 10β’
29
2
ΠΠ°Π»ΠΈΡΠΎΡΠ½ΠΈΠΉΡΡ ΠΎΡ ΠΡΠ΅Π³ΠΎΠ½Π° Π΄ΠΎ ΠΠ΅ΠΊΡΠΈΠΊΠΈ
ΠΠΆΠ΅ΡΡΡΠΈ ΠΠ΅ΠΉΠΊΠ΅Ρ
9 ΠΈΡΠ»Ρ 9β’
24
ΠΡΡΡ Π»Π΅Ρ ΡΠ»Π΅ΠΆΠ΅Π½ΠΈΡ Π·Π° ΡΠ²ΠΎΠ±ΠΎΠ΄ΠΎΠΉ ΠΏΡΠ΅ΡΡΡ
90 Augβ’ 3 Harris 90 Lapiroff00035
ΠΠ΅Π½ΡΠΈΠ½Ρ Π² ΠΊΠΎΡΠΌΠΎΡΠ΅ π©πΌβπ
Raluca Nicola
28 ΠΌΠ°ΡΡΠ°, 2021 β’
62
Π―ΠΏΠΎΠ½ΡΠΊΠΈΠΉ ΠΎΡ Hokkaido Π΄ΠΎ Okinawa
.
ΠΡΠΎΡ Π½ΠΎΡΡΠ±ΡΠΊ — FORKSorami Hisamoto
Aug 21.
ΠΠ°ΠΊ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°ΡΡ Dataviz
Tom Larkworthy
ΠΠΠΠΠ’ΠΠ― 16 β’
22
ΠΠΎΠ»Π»Π°Π½Π΄ΡΡ ΠΎΡ Eemshaven Π΄ΠΎ Epen
ΠΡΠ»Ρ ΠΠ»Π°ΠΌ
Aug 17 β’
21
Π’ΠΎΠΌ. ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΡΠ΅Π²ΠΎΠ²ΠΈΠ΄Π½ΡΡ ΡΡΡΡΠΊΡΡΡ
ΠΠ°ΡΡΠ΅ ΠΡΡ
31 ΠΈΡΠ»Ρ β’
27
ΠΠ°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΡΠΆΡΠΈΠ½Ρ Π²ΡΡΠ΅ ΠΆΠ΅Π½ΡΠΈΠ½?
Tereza iofciu
Π°ΠΏΡΠ΅Π»Ρ 28 β’
6
ΠΡΠΎΠΌΠ½ΡΠ΅ Π°Π³Π΅Π½ΡΡ: ΠΏΠΎΠ»ΠΈΠ»ΠΈΠ½Ρ ΠΈ ΡΠΈΠ»Ρ
ΠΡΠ° Π½ΠΎΡΡΠ±ΡΠΊ — Π²ΠΈΠ»ΠΊΠ°Graham McNeill
5 β’
65
Π‘ΡΡΠΎΠΈΠΆΠΈ
3 ΠΌΠ°Ρ 2021 Π³. β’
24
Π’Π°Π±Π»ΠΈΡΠ° ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ
SUGIMOTO Tatsuo
Π°Π²Π³ΡΡΡ 3 β’
21
ΠΠ²ΠΈΠΆΠ΅Π½ΠΈΠ΅
JO WOOD
13 ΠΈΡΠ»Ρ β’
60
2
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ°ΡΡΠΊΠ° Π²ΠΎΠΊΡΡΠ³ ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°
Anjana Vakil
Apr 19 β’
4
ΠΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΊΠ°ΡΡΠ°: Π΄Π΅Π½Ρ: Π΄Π΅Π½Ρ: Π΄Π΅Π½Ρ: Π΄Π΅Π½Ρ: Π΄Π΅Π½Ρ: Π΄Π΅Π½Ρ: Π΄Π΅Π½Ρ: Π΄Π΅Π½Ρ: Π΄Π΅Π½Ρ: Π΄Π΅Π½Ρ: Π΄Π΅Π½Ρ.

attr('x', 50) // Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° text
.attr('y', 50)
.style("fill","firebrick") // Π·Π°Π»ΠΈΠ²ΠΊΠ° ΡΠ΅ΠΊΡΡΠ° ΡΠ²Π΅ΡΠΎΠΌ
select('span') // Π²ΡΠ±ΠΎΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ span Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅
.style('color', 'darkgreen') // ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ²Π΅ΡΠ°
d3.selectAll('p') // Π²ΡΠ±ΠΎΡ Π²ΡΠ΅Ρ
ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠΎΠ²
.selectAll('span') // Π²ΡΠ±ΠΎΡ Π²ΡΠ΅Ρ
span Π² ΡΡΠΈΡ
ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠ°Ρ
.
.style('color', 'goldenrod') // ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ²Π΅ΡΠ°
d3.select('p') // Π²ΡΠ±ΠΎΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠ° Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅
.select('span') // Π²ΡΠ±ΠΎΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ span Π² ΡΡΠΎΠΌ ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠ΅
.style('color', 'firebrick') // ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ²Π΅ΡΠ°
append('circle')
.attr('cx', function (d) { return d.x || d.pageX })
.attr('cy', function (d) { return d.y || d.pageY })
.attr('fill', 'red')
.attr('r', 10)
circles
.exit()
.remove()
})
datum().
on('click', function () {
events.push(d3.event)
if (events.length > 5) events.shift()
var circles = svg.selectAll('circle')
.data(events, function (e) { return e.timeStamp })
.attr('fill', 'gray')
circles
.enter()
.append('circle')
.attr('cx', function (d) { return d.x || d.pageX })
.attr('cy', function (d) { return d.y || d.pageY })
.attr('fill', 'red')
.attr('r', 0) // ΠΠ°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
.transition()
.duration(1000) // ΠΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Π° ΠΎΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌΡ
.attr('r', 10) // ΠΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
circles
.exit()
.transition()
.attr('r', 0)
.remove()
})
