Eplot: Emacs में चार्ट बनाने के लिए एक नया पैकेज
(lars.ingebrigtsen.no)- eplot Emacs के अंदर संख्यात्मक डेटा से सरल चार्ट बनाने के लिए एक पैकेज है, जिसकी शुरुआत
chart.elऔर Org/Gnuplot संयोजन की axis labeling और usability सीमाओं से हुई - सबसे बड़ी चुनौती Y-axis ticks थी, जिसमें 1·2·5 श्रृंखला के देखने में अच्छे नंबरों के साथ extreme scales और time ranges को स्वाभाविक रूप से संभालना पड़ता है
- पुराने PHP chart library के अनुभव को Emacs Lisp में लाते हुए SVG-आधारित gradient और dark mode जैसी अभिव्यक्तियाँ लागू की गईं, लेकिन pixel-level processing की जरूरत वाले कुछ effects को छोड़ा गया
- जब बहुत सारे नंबर वाले buffer में
M-x eplotचलाया जाता है, तो chart buffer खुलता है, और headers तथाC-c C-cकी मदद से settings को जल्दी बदलकर नतीजा देखा जा सकता है - कोड GitHub पर सार्वजनिक है, लेकिन यह एक हफ्ते तक test case-केंद्रित तरीके से जल्दी लिखा गया work in progress कोड है, इसलिए code paths को व्यवस्थित करना और readability सुधारना अभी बाकी है
Emacs के अंदर ही सीधे चार्ट बनाने की ज़रूरत क्यों पड़ी
- आसान plots बनाने का तरीका लंबे समय से खोज रहे थे, और फ़िल्म ratings पर लेख लिखते समय Emacs के built-in
chart.elको आज़माया chart.elEmacs में शामिल है, लेकिन मूल रूप सेeieiotesting tool से निकली सुविधा होने के कारण इसकी उपयोग-सीमा सीमित है- ज़रूरी काम ज़्यादातर किए जा सकते थे, लेकिन खासकर Y-axis display संतोषजनक नहीं था
चार्ट की गुणवत्ता तय करने वाले axis ticks
- खराब axis display तुरंत नज़र आ जाती है, लेकिन उसे वास्तव में स्वाभाविक बनाना हो तो कई edge cases को सावधानी से संभालना पड़ता है
- Google Finance भी पहले unnatural axis का इस्तेमाल करता था, जिसमें सबसे बड़े मान को Y-axis के सबसे ऊपर वाले tick पर रखा जाता था और origin की दिशा में समान अंतराल वाली रेखाएँ जोड़ी जाती थीं
- याद है कि ऐसे charts लगभग 2021 तक मौजूद थे
- बाद में पूरी साइट को फिर से implement करने पर बेहतर axes मिल गए
- लगभग 1997 में एक stock brokerage कंपनी में काम करते समय chart library लागू करने का अनुभव था
- axis tick की समस्या कठिन गणित की समस्या से ज़्यादा, अच्छे दिखने वाले नंबर और exception ranges को ध्यान से चुनने की समस्या के करीब है
- अच्छे दिखने वाले नंबर आम तौर पर 1, 2, 5 की अलग-अलग scales होते हैं
- stock charts में
$0.00001~$0.00002,1e9~1e10जैसी ranges भी आ सकती हैं - time axis में year, half-year, quarter, month, week, और month को week units में बाँटने तक पर विचार करना पड़ता है
जहाँ मौजूदा tools को जस का तस इस्तेमाल करना मुश्किल है
- पहले बनाई गई PHP chart library web server पर output बनाने के लिए सुविधाजनक है, लेकिन Emacs के अंदर नंबरों के साथ काम करते हुए प्रयोग करने के लिए उपयुक्त नहीं है
- Excel और Jupyter Notebook की लोकप्रियता की तरह, डेटा को interactive तरीके से समायोजित करते हुए मनचाहे chart के करीब पहुँचने की प्रक्रिया महत्वपूर्ण है
- Org भी plot सुविधा देता है, लेकिन Org plot backend के रूप में Gnuplot का इस्तेमाल करता है
- Gnuplot आम तौर पर उपयोगी है, फिर भी उदाहरण में Y-axis number format जैसे default बदलने हों तो यह बोझिल हो सकता है
eplot का implementation और rendering features
chartनाम पहले से इस्तेमाल में था, इसलिए नए पैकेज का नाम eplot रखा गया- पुराने PHP library की सारी features लाने का इरादा नहीं था, लेकिन implementation शुरू करते ही अधिकांश चीज़ें फिर से बनानी पड़ीं
- नए version में dark mode जैसी features भी शामिल हैं
- PHP library के gradients हाथ से लिखे गए तरीके पर आधारित थे, और याद है कि उसमें GIF colormap resources जैसी चीज़ें भी शामिल थीं
- Emacs Lisp version SVG का इस्तेमाल करता है
- SVG gradients को support करता है, इसलिए polygon और gradients को मिलाकर मिलती-जुलती effect बनाई जाती है
- PHP original के समान परिणाम प्राप्त किए जा सकते हैं
- एक और अलग तरह का gradient implement नहीं किया गया
- उसके लिए pixel-level या कम से कम line-level implementation की जरूरत है, इसलिए यह कठिन है
- संभव है कि mathematical calculations की जरूरत पड़े, इसलिए इसे छोड़ा गया
उपयोग प्रवाह और settings का तरीका
- बहुत सारे नंबर वाले buffer में
M-x eplotचलाने पर अलग buffer में chart दिखता है - chart को मनचाहे रूप में समायोजित करने के लिए headers की अवधारणा लाई गई
- ज़्यादातर उपयोगी options को headers से नियंत्रित किया जा सकता है
- headers जोड़ने के बाद
C-c C-cदबाएँ तो परिणाम तुरंत देखा जा सकता है - इसे आसान बनाने के लिए eplot mode भी है
- headers जोड़ने के बाद
- सरल उदाहरण छोटे chart format के रूप में दिए गए हैं, और लेख की पहली image में दिखी कई variations भी ज़्यादातर headers से बनाई गई हैं
सार्वजनिक स्थिति और बाकी काम
- विभिन्न संभावनाओं को दस्तावेज़ित करने के लिए
README.mdलिखा गया - कोड Microsoft Github पर सार्वजनिक है
- मौजूदा स्थिति अभी भी work in progress है
- बुनियादी रूप से यह कुछ हद तक उपयोगी हो सकता है, लेकिन एक हफ्ते तक लगातार बदलते हुए लिखे जाने के कारण इसकी स्थिरता के बारे में निश्चित रूप से कुछ कहना मुश्किल है
- कोड test cases के हिसाब से अल्प-प्रभावी तरीके से लिखा गया है, इसलिए सफाई की जरूरत है
- कई code paths को एकीकृत करना होगा
- code readability बढ़ानी होगी
- फिलहाल आराम के लिए इसे मौजूदा स्थिति में push किया गया है, इसलिए वास्तविक उपयोगकर्ताओं को अभी सावधानी बरतनी होगी
1 टिप्पणियां
Hacker News की राय
मुझे यह क्षेत्र पसंद है, इसलिए सामान्य सलाह के तौर पर जोड़ना चाहूँगा: पहले Our World in Data में Max Roser और Hannah Ritchie के साथ Grapher library(https://github.com/owid/owid-grapher) engineer के रूप में काम करते हुए मैंने अच्छे chart बनाने के बारे में बहुत कुछ सीखा
उदाहरणों को देखकर लगता है कि title·subtitle·caption को हल्के में न लेना बेहतर होगा। आपने पहले ही “simple header” बना रखा है, इसलिए इन्हें जोड़ना आसान होगा, और कुछ छोटे वाक्य बड़ा फर्क ला सकते हैं। Cole Nussbaumer Knaflic की “Storytelling with Data” भी recommend करता हूँ
अगर इसे आगे विकसित करते रहे, तो किसी दिन आप data flow library और DSL भी जोड़ना चाहेंगे। R के Hadley Wickham dplyr सबसे अच्छे थे, और मेरे Ohayo tool तथा OWID Grapher की CoreTable library(https://github.com/owid/owid-grapher/tree/master/packages/%4...) में भी मैंने उसी approach से प्रेरणा ली। Jeffrey Heer की अपेक्षाकृत नई library Arquero(https://idl.uw.edu/arquero/) भी इसी तरह की है
हाल में मैं Mike Bostock के नए tool Plot(https://observablehq.com/plot/) को देख रहा हूँ; अभी बस एक-दो दिन ही इस्तेमाल किया है, लेकिन उम्मीद जगाता है। मैं अभी Emacs इस्तेमाल नहीं करता, फिर भी आशा है कि ऊपर की बातें मददगार होंगी
उदाहरण के लिए, आप कोई data file generate कर रहे हों और chart बनाने से पहले उसे manually edit नहीं करना चाहते हों, या बड़े data file directory में हर file में हाथ से header जोड़े बिना जरूरत पड़ने पर उसे plot करके देखना चाहते हों
मूल लेख में जैसा कहा गया है, यह ऐसा मामला हो सकता है जहाँ जरूरी code की मात्रा सीधे implement करने से भी ज्यादा हो जाए
Y-axis के third-level tick size को बदलना हो तो
set_third_level_y_ticks()जैसा कुछ call करना पड़े। यह जरूरी नहीं कि बुरा हो, और शायद ऐसा होना अपरिहार्य भी हो, लेकिन सब कुछ special-case किया हुआ लगता है, इसलिए orthogonality कम महसूस होती हैफिर भी pure elisp में कुछ बनाने की कोशिश का सम्मान है
ये plots SVG हैं, इसलिए इन्हें LaTeX या web browser में ले जाया जा सकता है—यह भी बड़ी बात है। पहला वाला paper में डालने के लिए plots बनाने में काफी मजबूत उम्मीदवार बनता है। अच्छा काम है
फिर भी अब लगता है कि Codeberg को आखिरकार free और open-source projects के बीच कुछ traction मिलने लगा है
अभी github.com का home page खोला और Ctrl-F से “Microsoft” खोजा, तो 0 results मिले