


Buat Visualisasi Data dalam JavaScript Menggunakan Dimple dan D3
Dalam artikel ini, saya akan membimbing anda melalui penciptaan visualisasi data, iaitu Kenderaan AS mengimbas kembali untuk bulan Januari 2015, menggunakan perpustakaan Dimple.js JavaScript yang dibina di atas D3.Js.
Takeaways Key
- Visualisasi data boleh dibuat menggunakan JavaScript dan perpustakaan Dimple.js, yang dibina di atas D3.js, untuk membentangkan jumlah data yang besar dengan cara yang menarik.
- Proses ini melibatkan menetapkan matlamat, bekerja dengan data, dan mengikat data ke objek D3; Dalam kes ini, carta bar yang menggambarkan jumlah kenderaan yang ditarik balik oleh Maker untuk Januari 2015 telah diwujudkan.
- Pembersihan dan penyediaan data adalah penting untuk visualisasi data yang berjaya; Ini termasuk mengekstrak data yang relevan, mengurangkan lajur ke subset yang tersedia, dan mengumpulkan data secara manual berdasarkan kriteria tertentu.
- Perpustakaan D3.JS menyediakan sokongan out-of-the-box untuk pelbagai format fail data seperti CSV, TSV, atau JSON dan boleh mengubahnya menjadi array JavaScript untuk pemprosesan.
- Ciri -ciri tambahan seperti petua, peralihan estetik, dan manipulasi label boleh ditambah untuk meningkatkan visualisasi data dan interaksi pengguna.
NHTSA
/odi menyediakan fail ingat (yang boleh diakses melalui laman web mereka) yang mengandungi semua kempen kecacatan dan pematuhan yang berkaitan dengan keselamatan NHTSA sejak tahun 1967. Matlamat kami adalah untuk mengekstrak data untuk bulan tertentu ( Januari 2015), dan untuk membuat carta bar daripadanya, menggambarkan jumlah kenderaan yang ditarik balik oleh pembuat. Tonton Visualisasikan Data dengan D3.js Menggambarkan data anda dengan javascript
Tonton kursus ini Tonton kursus ini
inilah yang akan kita hadapi dengan:

Bekerja dengan data
hanya menyimpan data yang kita perlukan
Semua fail yang disebutkan dalam bahagian ini boleh didapati di repo GitHub kami.
Fail asal flat_rcl.txt (pautan) adalah fail nilai yang dipisahkan tab yang mengandungi lot data-109,682 rekod tepat. Terdapat fail yang disertakan rcl.txt (pautan) yang memperincikan lajur yang berkaitan dengan data ini.
kerana kami hanya berminat dengan data untuk Januari 2015 -atau sebaliknya rekod yang mana tarikh penciptaan rekod adalah Januari 2015 -rekod lain boleh dikeluarkan. Untuk melakukan ini, saya menggunakan program Spreadsheet OpenOffice Calc (walaupun perisian spreadsheet lain akan mencukupi). Fail yang dihasilkan, rcl_january_2015.csv (pautan) hanya mengira 201 rekod.
sekarang kita perlu mengurangkan lajur ke subset yang tersedia, iaitu:
Tarikh Penciptaan Rekod, Pembuat, Model, Tahun Model, Tarikh Mulakan Pembuatan, Tarikh Akhir Pembuatan, Potensi Bilangan Unit yang terjejas, Ringkasan Kecacatan, Ringkasan Akibat, dan Ringkasan Pembetulan. Kami kemudian boleh menambah nama lajur ke baris pertama fail CSV yang dihasilkan, rcl_january_2015_clean.csv (pautan).
Ini memberi kita data mentah yang kita perlukan untuk visualisasi kita.
Buat struktur data
Sekarang kita perlu mengumpulkan semula secara manual oleh pembuat, menggabungkan rekod -rekod yang mempunyai kecacatan yang sama. Kita perlu memastikan bahawa rekod gabungan disusun mengikut tarikh, kemudian dengan model dan bahawa mereka mempunyai jumlah potensi kumulatif jumlah unit yang terjejas.
Kami akan menggunakan struktur data JSON untuk kumpulan ini.
3 Ini boleh dikelompokkan menjadi satu baris yang menyatakan bahawa J4500 MCI dari tahun 2013, 2014 dan 2015, yang mempunyai tahun yang sama pembuatan, membentangkan kecacatan yang sama. Bilangan potensi unit yang terjejas sudah kumpulan ketiga -tiga model ini bersama -sama dalam dataset.inilah struktur data JSON yang akan kita gunakan:
<span>{ </span> <span>"items": [ </span> <span>{ </span> <span>"item": { </span> <span>"date": "", </span> <span>"models": [ </span> <span>"" </span> <span>], </span> <span>"units": "", </span> <span>"defect": "", </span> <span>"consequence": "", </span> <span>"corrective": "" </span> <span>} </span> <span>} </span> <span>] </span><span>}</span>
rcl_january_2015_json.csv (pautan). Demi keringkasan, contoh kerja kami akan menunjukkan hanya tiga pembuat pertama fail asal (3 dari 46).
mengikat data ke objek D3D3 menyediakan sokongan out-of-the-box untuk format fail data, seperti CSV, TSV, atau JSON. Panggilan Ajax dilakukan untuk mengambil fail, maka ia dihuraikan dan diubah menjadi array JavaScript. Fail CSV yang kami buat boleh diambil dengan kod berikut:
d3<span>.csv("RCL.csv", function (data) { </span> <span>// process the data </span><span>});</span>
data <span>= [ </span> <span>{ </span> <span>'Record creation date':'20150105', </span> <span>'Maker':'MCI', </span> <span>'Potential number of units affected':'109', </span> <span>'JSON data': '{ </span> <span>"items":[ </span> <span>{ </span> <span>"item": { </span> <span>"date":"January, 5 2015", </span> <span>"models":[ </span> <span>"J4500 (years 2013, 2014, 2015) ..." </span> <span>], </span> <span>"units":"109", </span> <span>"defect":"...", </span> <span>"consequence":"...", </span> <span>"corrective":"..." </span> <span>} </span> <span>} </span> <span>] </span> <span>}' </span> <span>}, </span> <span>... </span><span>];</span>
<span><span><span><div</span> id<span>="RecallsChart"</span>></span><span><span></div</span>></span> </span><span><span><span><div</span> id<span>="RecallDetails"</span>></span><span><span></div</span>></span></span>
<span>{ </span> <span>"items": [ </span> <span>{ </span> <span>"item": { </span> <span>"date": "", </span> <span>"models": [ </span> <span>"" </span> <span>], </span> <span>"units": "", </span> <span>"defect": "", </span> <span>"consequence": "", </span> <span>"corrective": "" </span> <span>} </span> <span>} </span> <span>] </span><span>}</span>
kita mula -mula menambah objek SVG ke elemen Div, merujuknya dengan IDnya. Kemudian kami menghubungkan data kami ke carta baru kami, yang akan diberikan dalam SVG. Akhirnya, kami menetapkan batas carta secara manual untuk meletakkannya dengan betul dalam div induknya.
d3<span>.csv("RCL.csv", function (data) { </span> <span>// process the data </span><span>});</span>
kami menetapkan paksi x carta ke medan pembuat data kami-kami menggunakan kaedah addCategoryaxis sebagai pembuatnya membentuk data kategori. Kami memerintahkan pembuat mengikut abjad menggunakan kaedah addorderrule dan menyembunyikan tajuk paksi-x (yang akan menjadi pembuat), kerana nama pembuatnya adalah jelas.
data <span>= [ </span> <span>{ </span> <span>'Record creation date':'20150105', </span> <span>'Maker':'MCI', </span> <span>'Potential number of units affected':'109', </span> <span>'JSON data': '{ </span> <span>"items":[ </span> <span>{ </span> <span>"item": { </span> <span>"date":"January, 5 2015", </span> <span>"models":[ </span> <span>"J4500 (years 2013, 2014, 2015) ..." </span> <span>], </span> <span>"units":"109", </span> <span>"defect":"...", </span> <span>"consequence":"...", </span> <span>"corrective":"..." </span> <span>} </span> <span>} </span> <span>] </span> <span>}' </span> <span>}, </span> <span>... </span><span>];</span>
Kami menetapkan paksi y carta ke bilangan potensi unit yang terjejas dalam data kami. Kita boleh menggunakan kaedah addMeasureaxis di sini, yang mentakrifkan paksi linear dari nilai yang diberikan, tetapi sebagai kemenangan pembuat mempunyai lebih daripada 20 kali bilangan potensi unit yang terjejas daripada sama ada MCI atau Thor, lajur yang dihasilkan akan kerdil kedua -dua orang lain . Dalam kes ini, skala logaritma memberikan lebih banyak ruang untuk nilai yang lebih kecil, jadi kami menggunakan kaedah addlogaxis, yang mungkir ke pangkalan 10.
<span><span><span><div</span> id<span>="RecallsChart"</span>></span><span><span></div</span>></span> </span><span><span><span><div</span> id<span>="RecallDetails"</span>></span><span><span></div</span>></span></span>
Sekarang kita telah menentukan paksi kita, kita boleh mengikat mereka bersama -sama untuk menjadikan grafik. Untuk ini kami memilih carta bar melalui dimple.plot.bar, dan kami mengikatnya ke medan data Maker. Elemen array kedua, data JSON, akan mengikat bahagian JSON dari data kami ke setiap bar dan membolehkan kami mengakses data yang betul apabila melayang di atas bar dengan tetikus.
<span>var svg = dimple.newSvg("#RecallsChart", 800, 560); </span><span>var myChart = new dimple<span>.chart</span>(svg, data); </span>myChart<span>.setBounds(60, 30, 710, 355)</span>
Secara lalai, tooltips dipaparkan apabila melayang dengan tetikus di atas unit plot (di sini, bar) dan tunjukkan paksi dan data siri. Dalam kes kami: pembuat (nilai paksi x), bilangan potensi unit yang terjejas (nilai paksi y), dan nilai teks biasa data JSON kami.
Fungsi GetToolTiptext terlalu banyak di sini untuk memproses data JSON dan memaparkannya di Div lain ke sisi. Ia mengembalikan pelbagai data yang ingin kami paparkan sebagai tooltip, ia Format nombor bahasa Inggeris generik melalui kaedah JavaScript Tolocalestring terbina dalam).
Tetapi mari kita kembali ke parsing data JSON.
dua bidang agregat yang kami akses (Aggfield [0] dan Aggfield [1]) sepadan dengan pelbagai bidang data yang kami tetapkan sebagai siri (["pembuat", "data json"]), dengan Aggfield sendiri menjadi harta objek elemen yang mendasari.
Kami menghuraikan tali JSON dengan fungsi parsejson JQuery, menetapkan pelbagai tajuk panjang penuh yang sepadan dengan kekunci objek JSON kami, kemudian, dengan melelehkan objek JSON, kami membina rentetan HTML untuk ditambah ke Div dengan ID dengan ID dengan ID dengan ID dengan ID dengan ID RecreakDetails.
<span>var x = myChart.addCategoryAxis("x", "Maker"); </span>x<span>.addOrderRule("Maker"); </span>x<span>.title = '';</span>
kami akhirnya melukis carta dengan peralihan estetik menggunakan kemudahan elastik dengan kelewatan satu saat.
myChart<span>.addLogAxis("y", "Potential number of units affected");</span>
Adakah saya katakan akhirnya? Nah, di sini kita menambah satu lagi helah estetik ke label paksi-x.
Secara lalai, label paksi x ditulis secara mendatar. Tetapi mereka boleh dengan mudah bertindih, jadi kami akan menulis secara menegak. Di sinilah pendedahan Dimple terhadap objek D3 yang mendasari berguna. Sila ambil perhatian bahawa kita hanya boleh mengubahnya sebaik sahaja carta telah ditarik, oleh itu selepas panggilan myChart.Draw ().
Untuk melakukan ini, kita mula-mula memilih setiap teks label, atau sebaliknya bentuk SVG yang sepadan yang dikaitkan dengan paksi X untuk setiap label. Kaedah getBbox () tergolong dalam interfacesvglocatable dan mengembalikan objek svGrect yang mentakrifkan kotak sempadan, mendedahkan koordinat, ketinggian dan lebarnya. Kami kemudian melakukan putaran kotak SVG, dan terjemahan menegak sedikit untuk meletakkannya lebih dekat dengan garis paksi-x.
dan inilah hasil akhir:
Lihat kenderaan pena yang ditarik balik untuk Januari 2015 oleh SitePoint (@SitePoint) pada Codepen.
Lebar pen ini telah dikurangkan agar sesuai dengan artikel itu. Anda dapat melihat codepen asal di sini
Kesimpulan
Dalam artikel ini kita telah melihat bagaimana untuk membersihkan dan menyediakan data untuk visualisasi data, khususnya menentukan struktur data untuk memadankan hasil akhir yang kita ada dalam fikiran. Kami menggunakan kedua -dua perpustakaan dimple.js dan d3.js, dengan beberapa panggilan terhad kepada jQuery (kebanyakannya berkaitan dengan pemprosesan JSON). Kami telah menarik carta bar dari data kami, dengan sedikit interaksi penerokaan dengan melampaui ciri tooltip Dimple. Kami juga telah mengakses objek D3 yang mendasari untuk memanipulasi label paksi x.
Sebagai nota sampingan, SVG kini disokong secara meluas, tetapi amalan yang baik untuk menyemaknya terlebih dahulu (dengan Modernizr misalnya), dan untuk menyediakan dengan sandaran seperti imej PNG di mana sahaja diperlukan. Sudah tentu, pemuatan bersyarat d3.js dan dimple.js juga perlu diambil kira.
Atas ialah kandungan terperinci Buat Visualisasi Data dalam JavaScript Menggunakan Dimple dan D3. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Soalan dan penyelesaian yang sering ditanya untuk percetakan tiket kertas terma depan dalam pembangunan front-end, percetakan tiket adalah keperluan umum. Walau bagaimanapun, banyak pemaju sedang melaksanakan ...

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Tidak ada gaji mutlak untuk pemaju Python dan JavaScript, bergantung kepada kemahiran dan keperluan industri. 1. Python boleh dibayar lebih banyak dalam sains data dan pembelajaran mesin. 2. JavaScript mempunyai permintaan yang besar dalam perkembangan depan dan stack penuh, dan gajinya juga cukup besar. 3. Faktor mempengaruhi termasuk pengalaman, lokasi geografi, saiz syarikat dan kemahiran khusus.

Perbincangan mengenai realisasi kesan animasi tatal dan elemen Parallax dalam artikel ini akan meneroka bagaimana untuk mencapai yang serupa dengan laman web rasmi Shiseido (https://www.shiseido.co.jp/sb/wonderland/) ... ...

Pembelajaran JavaScript tidak sukar, tetapi ia mencabar. 1) Memahami konsep asas seperti pembolehubah, jenis data, fungsi, dan sebagainya. 2) Pengaturcaraan asynchronous tuan dan melaksanakannya melalui gelung acara. 3) Gunakan operasi DOM dan berjanji untuk mengendalikan permintaan tak segerak. 4) Elakkan kesilapan biasa dan gunakan teknik debugging. 5) Mengoptimumkan prestasi dan mengikuti amalan terbaik.

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.

Bagaimana cara menggabungkan elemen array dengan ID yang sama ke dalam satu objek dalam JavaScript? Semasa memproses data, kita sering menghadapi keperluan untuk mempunyai id yang sama ...

Terokai pelaksanaan fungsi seretan panel dan drop panel seperti VSCode di bahagian depan. Dalam pembangunan front-end, bagaimana untuk melaksanakan vscode seperti ...
