Analisis Mendalam D3
(d3indepth.com)- D3 in Depth adalah materi pembelajaran yang membahas proses membuat visualisasi data kustom dengan D3.js, berdasarkan D3 6 dan 7
- Berfokus pada pembuatan visualisasi kustom daripada sekadar cara memakai chart sederhana, sekaligus membantu mempelajari komponen-komponen visualisasi web
- Dasar-dasar HTML, SVG, CSS, dan JavaScript terhubung dengan pekerjaan D3, sehingga membantu memahami representasi data berbasis web
- Juga terhubung dengan materi dashboard dan data story yang memanfaatkan React, Chart.js, dan Leaflet, sehingga dapat membentuk alur belajar visualisasi JavaScript
- Bagi pembaca yang ingin mempelajari D3 secara mendalam, materi ini dapat digunakan sebagai sumber pengantar sekaligus lanjutan yang menggabungkan pemahaman konsep dan praktik
Cakupan yang dibahas D3 in Depth
- D3 in Depth ditujukan untuk D3 versi 6 dan 7
- Anda dapat mempelajari cara membuat visualisasi data kustom menggunakan D3.js
- Materi ini juga membahas HTML, SVG, CSS, dan JavaScript sebagai elemen dasar yang diperlukan untuk membuat visualisasi berbasis web
Materi visualisasi JavaScript yang bisa dilihat bersama
- Data Dashboards with JavaScript membahas cara membuat dashboard data menggunakan React, Chart.js, dan Leaflet
- Visualising Data with JavaScript membahas cara membuat chart dan data story menggunakan Chart.js, Leaflet, D3, dan React
- Salah satu ulasan pembaca menilai materi ini tinggi di antara buku-buku D3, dengan isi yang jelas, mudah diikuti, dan konsep yang kuat
1 komentar
Komentar Hacker News
Ini adalah library yang menambahkan banyak konvensi dan fitur kemudahan di atas D3 untuk membuat graf, chart, dan plot
Lebih jauh lagi ada juga Observable Framework[2], yaitu generator situs statis untuk dashboard visualisasi yang mendukung Plot, D3, dan berbagai library lainnya
1: https://observablehq.com/plot/
2: https://observablehq.com/framework/
Untuk berbagai jenis plot, sering kali justru lebih mudah memanipulasi data SVG secara langsung, dan itu juga tidak terlalu sulit
Akan bagus kalau ada library atau framework yang membuat output SVG atau canvas lebih mudah dimanipulasi. Perubahan kecil seharusnya sangat mudah, tetapi makin tinggi level framework, makin sulit keluar dari jalur yang sudah ditentukan
Dokumentasinya juga lumayan bagus, tetapi kurang bagian referensi API yang benar-benar berguna, jadi tidak mudah menemukan fitur-fiturnya
Saya sebisa mungkin menghindari membuat graf dengan HTML5 canvas, jadi akan bagus kalau ada pendekatan baru yang dirancang untuk itu
Edit: setelah menyalakan akselerasi perangkat keras, memang lebih mulus, tetapi bahkan di Ryzen 9 masih lebih tersendat daripada yang saya harapkan
Kalau diminta menyelesaikan persamaan diferensial parsial yang tidak saya lihat selama 10 tahun, rasanya saya justru akan lebih cepat ingat lagi
Saya juga menganggap dokumentasi referensi D3 benar-benar buruk
Meski begitu, sekarang sepertinya sudah lebih stabil. Saya mulai bisa menangkap polanya setelah menulisnya dengan gaya yang lebih imperatif menggunakan Svelte+D3, bukan hanya D3 saja
Dengan begitu, elemen yang dihasilkan lebih mudah dipahami daripada harus memeriksanya belakangan lewat developer tools
Situs ini membantu untuk memakai D3 bersama Svelte: https://svelte.recipes/
80% pekerjaan saya lebih dekat ke aplikasi, 10% ke sistem, dan 10% ke analisis data, dan kadang saya membuat notebook Jupyter selama dua minggu lalu tidak menyentuhnya lagi selama dua bulan
Kebanyakan library plotting punya banyak aturan arbitrer yang harus dihafal, dan biasanya ada beberapa bahasa khusus domain kecil. String sederhana bisa ditafsirkan jauh lebih rumit daripada
atoiSelain itu, ada banyak hal yang menurut sudut pandang saya keliru di berbagai area seperti penentuan rentang sumbu, penanganan jumlah titik yang sangat besar, dan lain-lain
D3 memang memaksa kita melakukan banyak hal sendiri, tetapi antarmuka untuk itu secara konsep cukup intuitif. Daripada memakai kode umum milik orang lain yang besar, penuh bug, dan API-nya terasa seperti merakit kapal di dalam botol, saya rasa lebih baik membuatnya dengan benar memakai D3.js
Mudah dipakai dengan cara yang salah, sulit di-debug, dan juga sulit dipahami
Bukan berarti masalah ini mudah dipecahkan. Jika harus membuat grafik berbasis data yang sangat spesifik, saya mungkin tetap akan memilih D3
Membandingkan API dengan standar seperti itu sebenarnya terasa tidak adil
Kode yang bahkan sulit dipahami oleh penulisnya sendiri harus sebisa mungkin dihindari, dan D3 adalah contoh utama library seperti itu
Misalnya, jika menggambar data dalam rentang nilai 0~100 ke layar 1080p berukuran 1920x1080, pada suatu titik kita harus memutuskan bagaimana melakukan penskalaan agar data cocok dengan proyeksi layar
Kita bisa menghitung matematikanya sendiri, atau menyerahkan perhitungannya ke library seperti D3
Walaupun tidak menggambar data di web, suatu saat nanti kita akan perlu menggambar data di suatu tempat, dan akan berguna jika bisa menemukan alat dengan peran serupa di ekosistem itu
Kalau saya ingat benar, saya harus menskalakan persegi-persegi yang digambar pada graf agar sesuai dengan ukuran PNG yang sedang dibuat
Tentu saja itu sangat sepele dan sama sekali berbeda dari hal-hal menakjubkan yang bisa dilakukan D3, tetapi itu pengalaman keren pertama saya membuat gambar di komputer dengan tangan saya sendiri
Secara pribadi D3 tidak pernah terasa intuitif bagi saya. Mungkin masalahnya karena ia mencoba melakukan terlalu banyak hal pada terlalu banyak tingkat abstraksi
Kalau sekadar soal memproyeksikan data, itu mudah dipahami, tetapi proyeksi itu juga sangat terkait dengan sumbu dan elemen lain, jadi mungkin itu penyebabnya
Perbedaan perhitungan
selectdanselectyang oleh mbostock disebut sebagai abstraksi inti D3, menurut saya lebih mirip fasilitas demi menulispaint()yang bisa di-reenterHanya saja pernyataan paint diekspresikan sebagai pernyataan builder, lalu dengan hiasan bahwa ia sendiri terikat dalam cakupan select dan bisa dipecah untuk berbagai efek
Terutama pada contoh animasi, pekerjaan yang dilakukan D3 ternyata sangat sedikit hingga mengejutkan, dan penggunaan loop luar serta pelacakan status seiring waktu tetap harus dilakukan sendiri
D3 juga tidak menyediakan abstraksi untuk mengenkapsulasi visualisasi, baik sebagai fungsi maupun bentuk lain, dan bagian ini dibiarkan sebagai pekerjaan rumah bagi pembaca
Bagi pengguna baru D3, semua ini terasa sebagai kejutan besar atau bahkan guncangan. Mirip seperti mengadopsi database baru lalu yang tersedia hanya pustaka I/O file, indeks B-tree, dan query optimizer, sementara semuanya harus dirangkai sendiri
Ini adalah bentuk penggantian
d3-select, modul manipulasi DOM D3, dengan React. Fakta bahwa ini memungkinkan dan bekerja dengan baik adalah bukti bahwa desain D3 memang hebatBergantung pada tujuan, ini bisa jadi alat yang diperlukan, atau justru bukan
Saya masih memakai banyak fungsi bantu seperti easing atau scaling, tetapi komponen nyatanya kini saya bangun dengan framework modern. Dalam kasus saya, itu Vue 3 dan TypeScript
Meski begitu, saya tetap berterima kasih pada masa-masa indah yang diberikan D3.js dan karena telah mengajarkan banyak praktik baik dalam visualisasi data
Default dan demo dari Mike Bostock adalah sumber inspirasi sekaligus contoh standar yang baik, dan juga sangat selaras dengan minimalisme Tufte
D3 dan jQuery agak mirip dalam beberapa hal, dan keduanya mudah berubah menjadi kode spageti. Alat seperti VisX menambahkan banyak struktur di atas D3 yang dipakainya sehingga tetap waras
Namun saya penasaran apakah saat ingin membuat sesuatu yang lebih kustom dibanding ketika memakai D3 murni, rasanya jadi terbatas seolah harus melawan alatnya
Alat lain yang juga terinspirasi dari GG adalah ggplot2, yang namanya pun cocok, dan ditujukan untuk bahasa R
Ia menawarkan antarmuka yang jauh lebih ringkas dan lebih dekat ke paradigma fungsional, serta cocok dipadukan dengan alat yang cukup langka bernama Rush untuk membuat grafik cepat dengan mem-pipe CSV, yakni one-liner R untuk shell
Alat-alat seperti ini biasanya bergantung pada fitur browser, atau memakai solusi server-side rendering yang canggung dengan browser headless untuk generasi di sisi server
Akan sangat bagus jika bisa membuat diagram Venn secara terprogram. Anehnya, hampir tidak ada apa pun di area ini
Beberapa library chart JavaScript memang mendukungnya, tetapi secara umum dukungannya tampak sangat minim
gnuplot terlihat bagus, tetapi tidak mendukung diagram Venn
Ini juga merupakan dependensi OpenSearch Dashboards, sehingga memungkinkan pengguna membuat dashboard kustom di atas data log dan observability[2]
Tampaknya library Vega bisa sedikit meringankan masalah kurva belajar D3 yang dibicarakan orang-orang
[1] https://vega.github.io/vega/docs/
[2] https://opensearch.org/docs/latest/dashboards/visualize/vega...