Eplot: Paket baru untuk membuat chart di Emacs
(lars.ingebrigtsen.no)- eplot adalah paket untuk menggambar chart sederhana dari data numerik di dalam Emacs, berawal dari keterbatasan tampilan sumbu dan kegunaan pada kombinasi
chart.elserta Org/Gnuplot - Tantangan terbesar adalah skala sumbu Y, yang harus menangani angka yang enak dilihat dalam deret 1·2·5 serta skala ekstrem dan rentang waktu secara alami
- Dengan memindahkan pengalaman dari library chart PHP lama ke Emacs Lisp, fitur visual seperti gradien berbasis SVG dan dark mode diimplementasikan, tetapi sebagian efek yang membutuhkan pemrosesan per piksel dikecualikan
- Jika menjalankan
M-x eplotdi buffer yang berisi banyak angka, buffer chart akan terbuka, dan pengaturan dapat diubah cepat melalui headers sertaC-c C-cuntuk melihat hasilnya - Kodenya telah dipublikasikan di GitHub, tetapi masih berupa kode work in progress yang ditulis cepat selama seminggu dengan fokus pada test case, sehingga masih perlu perapian jalur kode dan peningkatan keterbacaan
Alasan ingin menggambar chart langsung di dalam Emacs
- Setelah lama mencari cara mudah membuat plot sederhana, penulis mencoba
chart.elbawaan Emacs saat menulis artikel tentang rating film chart.elmemang disertakan dalam Emacs, tetapi awalnya berasal dari alat pengujianeieio, sehingga cakupan penggunaannya terbatas- Pekerjaan yang dibutuhkan pada umumnya bisa dilakukan, tetapi terutama tampilan sumbu Y terasa kurang memuaskan
Skala sumbu yang menentukan kualitas chart
- Tampilan sumbu yang buruk mudah terlihat, tetapi untuk membuatnya terasa alami sebenarnya perlu menangani banyak kasus batas dengan cermat
- Google Finance dulu juga menggunakan sumbu yang tidak alami, dengan nilai terbesar ditempatkan sebagai skala paling atas sumbu Y lalu garis-garis berjarak sama ditambahkan ke arah titik asal
- Chart seperti ini seingat penulis masih ada sampai sekitar 2021
- Setelah itu, seluruh situs diimplementasikan ulang dan mendapatkan sumbu yang lebih baik
- Sekitar 1997, penulis pernah bekerja di perusahaan pialang saham dan mengimplementasikan chart library
- Masalah skala sumbu bukanlah soal matematika yang sulit, melainkan lebih dekat ke persoalan memilih angka yang enak dilihat dan rentang pengecualian dengan teliti
- Angka yang enak dilihat umumnya berada pada berbagai skala 1, 2, 5
- Pada chart saham, rentang seperti
$0.00001~$0.00002atau1e9~1e10juga bisa muncul - Untuk sumbu waktu, perlu mempertimbangkan tahun, semester, kuartal, bulan, minggu, hingga pembagian satu bulan dalam satuan minggu
Titik yang membuat alat yang ada sulit dipakai langsung
- Library chart PHP yang dulu dibuat memang praktis untuk menghasilkan output di server web, tetapi tidak cocok untuk bereksperimen dengan angka di dalam Emacs
- Seperti alasan Excel dan Jupyter Notebook populer, proses menyesuaikan data secara interaktif hingga mendekati chart yang diinginkan itu penting
- Org juga menyediakan fitur plot, tetapi Org plot menggunakan Gnuplot sebagai backend
- Gnuplot pada umumnya cukup bisa dipakai, tetapi saat ingin mengubah default, seperti format angka sumbu Y pada contoh, bebannya bisa menjadi besar
Implementasi eplot dan fitur visual
- Karena nama
chartsudah digunakan, nama paket baru ditetapkan sebagai eplot - Awalnya tidak berniat memindahkan semua fitur library PHP lama, tetapi begitu implementasi dimulai, sebagian besar akhirnya dibuat ulang
- Versi baru ini juga memasukkan fitur seperti dark mode
- Gradien pada library PHP dibuat secara manual, dan seingat penulis juga menyertakan hal seperti resource colormap GIF
- Versi Emacs Lisp menggunakan SVG
- Karena SVG mendukung gradien, efek serupa dibuat dengan menggabungkan poligon dan gradien
- Hasil yang mirip dengan versi PHP asli dapat diperoleh
- Satu gradien lain yang agak unik tidak diimplementasikan
- Sulit karena membutuhkan implementasi per piksel, atau setidaknya per baris
- Dikecualikan karena mungkin memerlukan perhitungan matematika
Alur penggunaan dan cara pengaturan
- Jika menjalankan
M-x eplotdi buffer yang berisi banyak angka, chart akan ditampilkan di buffer terpisah - Untuk menyesuaikan chart ke bentuk yang diinginkan, konsep headers diperkenalkan
- Sebagian besar opsi yang berguna dapat dikendalikan melalui headers
- Setelah menambahkan headers, tekan
C-c C-cuntuk langsung melihat hasilnya - Ada juga eplot mode untuk mempermudah hal ini
- Setelah menambahkan headers, tekan
- Contoh sederhana disediakan dalam format chart berukuran kecil, dan sebagian besar variasi yang terlihat pada gambar pertama artikel juga dibuat dengan headers
Status publik dan pekerjaan yang tersisa
README.mdyang mendokumentasikan berbagai kemungkinan telah ditulis- Kodenya dipublikasikan di Microsoft Github
- Status saat ini masih work in progress
- Pada dasarnya penulis menilai paket ini mungkin sudah cukup berguna, tetapi karena ditulis sambil terus diperbaiki selama seminggu, stabilitasnya sulit dipastikan
- Kode ditulis dengan cara yang tidak efisien per test case, sehingga masih perlu dirapikan
- Beberapa jalur kode perlu digabungkan
- Keterbacaan kode perlu ditingkatkan
- Untuk saat ini kode di-push dalam keadaan sekarang agar penulis bisa beristirahat, dan pengguna nyata masih perlu berhati-hati
1 komentar
Opini Hacker News
Karena saya menyukai bidang ini, saya tambahkan saran umum: dulu saat bekerja sebagai engineer untuk library Grapher (https://github.com/owid/owid-grapher) di Our World in Data bersama Max Roser dan Hannah Ritchie, saya belajar banyak tentang cara membuat chart yang bagus
Dari contoh-contohnya, sebaiknya jangan menyepelekan judul, subjudul, dan caption. Karena sudah ada “header sederhana”, mestinya mudah untuk memasukkannya dengan baik, dan beberapa kalimat pendek bisa membuat perbedaan besar. Saya juga merekomendasikan “Storytelling with Data” karya Cole Nussbaumer Knaflic
Jika terus dikembangkan, suatu saat mungkin akan ingin menambahkan library alur data dan DSL juga. dplyr dari Hadley Wickham di R adalah yang terbaik, dan saya juga mengacu pada pendekatan itu di tool Ohayo saya serta library CoreTable milik OWID Grapher (https://github.com/owid/owid-grapher/tree/master/packages/%4...). Library yang relatif baru dari Jeffrey Heer, Arquero (https://idl.uw.edu/arquero/), juga masih satu aliran
Belakangan saya sedang melihat tool baru Mike Bostock, Plot (https://observablehq.com/plot/); baru memakainya sehari-dua hari, tetapi tampak menjanjikan. Saya sekarang tidak memakai Emacs, tetapi semoga hal-hal di atas membantu
Misalnya, saat sedang membuat file data sehingga tidak ingin mengeditnya secara manual sebelum menggambar chart, atau saat ingin mencoba menggambar setiap kali diperlukan dari direktori berisi file data besar tanpa menambahkan header ke tiap file dengan tangan
Seperti yang disebut di tulisan asli, besar kemungkinan jumlah kode yang dibutuhkan malah lebih banyak daripada mengimplementasikannya langsung
Untuk mengubah ukuran tick tingkat ketiga pada sumbu Y, seolah harus memanggil sesuatu seperti
set_third_level_y_ticks(). Bukan berarti itu buruk, dan mungkin memang tidak terhindarkan, tetapi semuanya terasa diperlakukan secara khusus sehingga kesan ortogonalitas-nya berkurangMeski begitu, saya menghargai upaya membuat sesuatu dengan elisp murni
Fakta bahwa plot-plot ini berupa SVG sehingga bisa dibawa ke LaTeX atau browser web juga penting. Yang pertama menjadikannya kandidat yang cukup kuat saat perlu membuat plot untuk disisipkan ke makalah. Hasil yang bagus
Meski begitu, sekarang Codeberg akhirnya tampaknya mulai mendapat momentum tertentu di antara proyek-proyek bebas dan open-source
Saya baru saja membuka halaman depan github.com dan mencari “Microsoft” dengan Ctrl-F: hasilnya 0