Eplot: Emacs'te grafik oluşturmak için yeni bir paket
(lars.ingebrigtsen.no)- eplot, Emacs içinde sayısal verilerden basit grafikler çizmek için geliştirilen bir paket; çıkış noktası ise
chart.elile Org/Gnuplot birleşiminin eksen gösterimi ve kullanılabilirlik sınırlamaları - En büyük sorun Y ekseni işaretleri olmuş; 1·2·5 dizisindeki hoş görünen sayıları ve uç ölçekler ile zaman aralıklarını doğal biçimde ele almak gerekiyor
- Önceki PHP grafik kütüphanesi deneyimi Emacs Lisp'e taşınırken SVG tabanlı gradient'ler ve karanlık mod gibi görsel özellikler uygulanmış, ancak piksel düzeyinde işleme gerektiren bazı efektler dışarıda bırakılmış
- Sayıların yoğun olduğu bir buffer'da
M-x eplotçalıştırıldığında grafik buffer'ı açılıyor ve headers ileC-c C-ckullanılarak ayarlar hızlıca değiştirilip sonuç görülebiliyor - Kod GitHub'da açık olsa da, bir haftalık test vakası odaklı hızlı geliştirme sonucu ortaya çıkmış bir work in progress; kod yollarının düzenlenmesi ve okunabilirliğin iyileştirilmesi hâlâ gerekiyor
Neden doğrudan Emacs içinde grafik çizmek istiyor?
- Uzun zamandır basit plot'ları kolayca üretmenin bir yolunu ararken, film puanlarıyla ilgili bir yazı yazarken Emacs'in yerleşik
chart.elaracını denemiş chart.elEmacs'e dahil olsa da, başlangıçtaeieiotest aracı olarak ortaya çıkmış bir özellik olduğu için kullanım alanı sınırlı- Gerekli işlerin çoğu yapılabilse de, özellikle Y ekseni gösterimi tatmin edici bulunmamış
Grafik kalitesini belirleyen eksen işaretleri
- Kötü eksen gösterimleri hemen göze çarpar, ama bunları gerçekten doğal göstermek için birçok sınır durumunu dikkatle ele almak gerekir
- Google Finance da geçmişte en büyük değeri Y ekseninin en üst işareti olarak koyup başlangıç noktasına doğru eşit aralıklı çizgiler ekleyen doğal olmayan bir eksen kullanıyordu
- Bunun 2021 civarına kadar sürdüğünü hatırlıyor
- Sonrasında tüm site yeniden uygulanınca daha iyi eksenlere kavuşmuş
- 1997 civarında bir aracı kurumda çalışırken chart library geliştirme deneyimi yaşamış
- Eksen işaretleri sorunu zor bir matematik probleminden çok, göze hoş gelen sayıları ve istisna aralıklarını dikkatle seçme meselesine daha yakın
- Hoş görünen sayılar genellikle 1, 2, 5'in farklı ölçekleri
- Hisse senedi grafiklerinde
$0.00001~$0.00002,1e9~1e10gibi aralıklar da görülebilir - Zaman ekseninde yıl, yarıyıl, çeyrek, ay, hafta ve hatta ayın haftalara bölünmesi gibi durumlar hesaba katılmalı
Mevcut araçları olduğu gibi kullanmanın zorlaştığı noktalar
- Daha önce yaptığı PHP grafik kütüphanesi, web sunucusunda çıktı üretmek için kullanışlı olsa da, Emacs içinde sayılarla oynayıp deney yapmak için uygun değil
- Excel ve Jupyter Notebook'un popüler olmasının nedenlerinden biri gibi, veriyi etkileşimli olarak ayarlayarak istenen grafiğe yaklaşma süreci önemli
- Org da plot özelliği sunuyor, ancak Org plot arka uç olarak Gnuplot kullanıyor
- Gnuplot genel olarak işe yarasa da, örnekteki Y ekseni sayı biçimi gibi varsayılanları değiştirmek istendiğinde yükü artabiliyor
eplot'un uygulanışı ve görsel özellikleri
chartadı zaten kullanımda olduğu için yeni paket adı eplot olarak belirlenmiş- Eski PHP kütüphanesinin tüm özelliklerini taşımayı planlamasa da, uygulamaya başlayınca çoğunu yeniden yapmış
- Yeni sürümde karanlık mod gibi özellikler de yer alıyor
- PHP kütüphanesindeki gradient'ler elle yazılmış bir yöntemdi ve GIF renk haritası kaynakları gibi şeyler de içerdiğini hatırlıyor
- Emacs Lisp sürümü SVG kullanıyor
- SVG gradient desteği sunduğu için, polygon ve gradient birleştirilerek benzer bir etki elde ediliyor
- PHP özgün sürümüne benzer sonuçlar alınabiliyor
- Farklı bir sıra dışı gradient uygulanmamış
- Piksel düzeyinde, en azından satır düzeyinde uygulama gerektiği için zor
- Matematiksel hesaplama gerektirebileceğinden dışarıda bırakılmış
Kullanım akışı ve yapılandırma yöntemi
- Çok sayıda sayı içeren bir buffer'da
M-x eplotçalıştırıldığında grafik ayrı bir buffer'da gösteriliyor - Grafiği istenen biçime ayarlamak için headers kavramı eklenmiş
- Faydalı seçeneklerin çoğu headers üzerinden kontrol edilebiliyor
- Header'lar eklendikten sonra
C-c C-ctuşlanarak sonuç anında görülebiliyor - Bunu kolaylaştırmak için bir eplot mode da var
- Header'lar eklendikten sonra
- Basit örnekler küçük gösterimli grafik biçiminde sunuluyor ve yazının ilk görselindeki çeşitli varyasyonların çoğu da headers ile üretilmiş
Açık durum ve kalan işler
- Çeşitli olasılıkları belgeleyen bir
README.mdhazırlanmış - Kod Microsoft Github üzerinde yayımlanmış
- Mevcut durum hâlâ work in progress
- Temelde belli ölçüde faydalı olabileceğini düşünse de, bir hafta boyunca sürekli düzeltilerek yazıldığı için kararlılığı konusunda kesin konuşmak zor
- Kod, test vakalarına göre verimsiz biçimde yazıldığından düzenlenmesi gereken bir durumda
- Birden çok kod yolunun birleştirilmesi gerekiyor
- Kod okunabilirliği artırılmalı
- Şimdilik dinlenmek için mevcut hâliyle push etmiş; gerçek kullanıcıların ise hâlâ dikkatli olması gerekiyor
1 yorum
Hacker News yorumları
Bu alanı sevdiğim için genel bir tavsiye ekleyeyim: Bir dönem Our World in Data’da Max Roser ve Hannah Ritchie ile birlikte Grapher kütüphanesinde (https://github.com/owid/owid-grapher) mühendis olarak çalışırken iyi grafik yapma konusunda çok şey öğrendim.
Örneklere bakınca başlık, alt başlık ve açıklamayı ihmal etmemek iyi olur. Zaten “basit bir header” hazırlamışsınız; bunları eklemek kolay olacaktır, birkaç kısa ifade büyük fark yaratır. Cole Nussbaumer Knaflic’in “Storytelling with Data” kitabını da öneririm.
Geliştirmeye devam ederseniz bir noktada veri akışı kütüphanesi ve DSL de eklemek isteyeceksiniz. R’den Hadley Wickham’ın dplyr’ı bu konuda en iyisiydi; kendi Ohayo aracımda ve OWID Grapher’ın CoreTable kütüphanesinde (https://github.com/owid/owid-grapher/tree/master/packages/%4...) de bu yaklaşımdan esinlendim. Jeffrey Heer’in görece yeni kütüphanesi Arquero (https://idl.uw.edu/arquero/) da benzer çizgide.
Son zamanlarda Mike Bostock’ın yeni aracı Plot’a (https://observablehq.com/plot/) bakıyorum; henüz sadece bir iki gün kullanmış olsam da umut verici. Şu anda Emacs kullanmıyorum ama umarım bunlar faydalı olur.
Örneğin veri dosyasını üretme aşamasındayken grafiği çizmeden önce elle düzenlemek istemeyebilirsiniz ya da büyük bir veri dosyaları dizininde, her dosyaya elle header eklemeden gerektiğinde çizip görmek isteyebilirsiniz.
Orijinal yazıda söylendiği gibi, gereken kod miktarının doğrudan uygulamaktan daha fazla olduğu bir duruma dönüşmesi muhtemel.
Y eksenindeki üçüncü seviye tik işaretlerinin boyutunu değiştirmek için
set_third_level_y_ticks()gibi bir şey çağırmak gibi. Bunun mutlaka kötü olduğunu söylemiyorum; belki de başka türlü olamaz, ama her şey özel durum gibi ele alınmış görünüyor ve ortogonallik düşükmüş hissi veriyor.Yine de saf elisp ile bir şey yapma girişimine saygı duyuyorum.
Bu plot’ların SVG olması ve LaTeX’e ya da web tarayıcısına aktarılabilmesi de önemli. İlki, bir makaleye eklenmesi gereken plot’ları üretirken oldukça güçlü bir aday olur. Güzel iş.
Yine de Codeberg artık özgür ve açık kaynak projeleri arasında nihayet bir miktar ivme kazanıyor gibi görünüyor.
Az önce github.com ana sayfasını açıp Ctrl-F ile “Microsoft” aradım; 0 sonuç.