Eplot: um novo pacote para criar gráficos no Emacs
(lars.ingebrigtsen.no)- eplot é um pacote para desenhar gráficos simples com dados numéricos dentro do Emacs, surgido a partir das limitações de marcação de eixos e usabilidade do
chart.ele da combinação Org/Gnuplot - A maior preocupação são as marcas do eixo Y, que precisam lidar de forma natural com números “bonitos” da série 1·2·5 e com escalas extremas e intervalos de tempo
- Ao transportar sua experiência com bibliotecas de gráficos em PHP para Emacs Lisp, o autor implementou recursos visuais como gradientes baseados em SVG e modo escuro, mas deixou de fora alguns efeitos que exigem tratamento em nível de pixel
- Ao executar
M-x eplotem um buffer com muitos números, um buffer de gráfico é aberto, e com headers eC-c C-cé possível mudar rapidamente as configurações e conferir o resultado - O código foi publicado no GitHub, mas ainda é um work in progress escrito rapidamente ao longo de uma semana com foco em casos de teste, então ainda faltam organização dos caminhos de código e melhorias de legibilidade
Por que querer desenhar gráficos direto dentro do Emacs
- Depois de muito tempo procurando uma forma fácil de criar plots simples, o autor experimentou o
chart.elembutido no Emacs ao escrever um texto sobre avaliações de filmes - O
chart.elvem incluído no Emacs, mas originalmente surgiu como uma ferramenta de teste doeieio, então seu alcance de uso é limitado - Em geral ele conseguia fazer o necessário, mas especialmente a exibição do eixo Y não era satisfatória
As marcas dos eixos definem a qualidade do gráfico
- Uma exibição ruim dos eixos chama atenção facilmente, mas para torná-la realmente natural é preciso tratar com cuidado vários casos de borda
- O Google Finance também usava no passado um eixo pouco natural, colocando o maior valor na marca superior do eixo Y e adicionando linhas em intervalos iguais na direção da origem
- O autor lembra que esse tipo de gráfico existia até por volta de 2021
- Depois, ao reimplementar todo o site, ele passou a ter eixos melhores
- Por volta de 1997, trabalhando em uma corretora, o autor teve experiência implementando uma biblioteca de gráficos
- O problema das marcas dos eixos está menos em matemática difícil e mais em escolher cuidadosamente números agradáveis e faixas excepcionais
- Números agradáveis costumam ser escalas variadas de 1, 2 e 5
- Em gráficos de ações, podem aparecer faixas como
$0.00001~$0.00002e1e9~1e10 - No eixo do tempo, é preciso considerar ano, semestre, trimestre, mês, semana e até divisões do mês por semanas
Onde fica difícil usar as ferramentas existentes como estão
- A biblioteca de gráficos em PHP criada anteriormente é prática para gerar resultados em um servidor web, mas não combina com experimentar dentro do Emacs enquanto se manipula números
- Assim como no caso da popularidade do Excel e do Jupyter Notebook, é importante o processo de ajustar os dados de forma interativa até chegar ao gráfico desejado
- O Org também oferece recursos de plot, mas o Org plot usa o Gnuplot como backend
- Embora o Gnuplot em geral seja útil, ele pode se tornar pesado quando se tenta mudar comportamentos padrão, como no formato dos números do eixo Y do exemplo
Implementação do eplot e recursos visuais
- Como o nome
chartjá estava em uso, o novo pacote recebeu o nome eplot - A intenção não era portar todos os recursos da biblioteca PHP existente, mas, ao iniciar a implementação, o autor acabou recriando a maior parte deles
- A nova versão também inclui recursos como modo escuro
- Os gradientes da biblioteca PHP eram escritos manualmente, e o autor lembra que ela até incluía algo como recursos de mapa de cores de GIF
- A versão em Emacs Lisp usa SVG
- Como o SVG oferece suporte a gradientes, ele combina polígonos e gradientes para produzir um efeito semelhante
- É possível obter resultados parecidos com os do original em PHP
- Um outro gradiente peculiar não foi implementado
- Ele exigiria implementação em nível de pixel ou ao menos de linha, o que dificulta bastante
- Talvez exigisse cálculos matemáticos, por isso foi deixado de fora
Fluxo de uso e forma de configuração
- Ao executar
M-x eplotem um buffer com muitos números, o gráfico é exibido em um buffer separado - Para ajustar o gráfico ao formato desejado, foi introduzido o conceito de headers
- A maioria das opções úteis pode ser controlada por headers
- Depois de adicionar os headers, basta pressionar
C-c C-cpara ver imediatamente o resultado - Também existe um eplot mode para facilitar esse processo
- Depois de adicionar os headers, basta pressionar
- Exemplos simples são fornecidos no formato de gráficos pequenos, e a maioria das várias variações mostradas na primeira imagem do texto também foi feita com headers
Estado de publicação e trabalho restante
- Foi escrito um
README.mddocumentando várias possibilidades - O código foi publicado no Microsoft Github
- O estado atual ainda é de work in progress
- O autor acredita que ele já pode ser útil até certo ponto, mas como foi escrito e corrigido continuamente ao longo de uma semana, é difícil afirmar sua estabilidade
- O código foi escrito de forma ineficiente, caso a caso de teste, e precisa de organização
- É necessário unificar vários caminhos de código
- É preciso melhorar a legibilidade do código
- Por enquanto ele foi enviado ao repositório nesse estado para que o autor pudesse descansar, e quem for usá-lo de fato ainda precisa ter cuidado
1 comentários
Opiniões no Hacker News
Como gosto dessa área, acrescento um conselho geral: no passado trabalhei como engenheiro da biblioteca Grapher (https://github.com/owid/owid-grapher) no Our World in Data, com Max Roser e Hannah Ritchie, e aprendi muito sobre como criar bons gráficos
Olhando os exemplos, acho bom não negligenciar título, subtítulo e legenda. Como vocês já criaram um “cabeçalho simples”, deve ser fácil encaixar isso bem, e algumas frases curtas fazem uma grande diferença. Também recomendo “Storytelling with Data”, da Cole Nussbaumer Knaflic
Se continuarem desenvolvendo, um dia vão acabar querendo incluir também uma biblioteca de fluxo de dados e uma DSL. O dplyr do Hadley Wickham, em R, foi o melhor, e também me inspirei nessa abordagem na minha ferramenta Ohayo e na biblioteca CoreTable do OWID Grapher (https://github.com/owid/owid-grapher/tree/master/packages/%4...). A biblioteca relativamente nova de Jeffrey Heer, Arquero (https://idl.uw.edu/arquero/), também é da mesma linha
Recentemente tenho olhado a nova ferramenta do Mike Bostock, Plot (https://observablehq.com/plot/); ainda só usei por um ou dois dias, mas parece promissora. Hoje não uso Emacs, mas espero que isso ajude
Por exemplo, pode ser que você esteja gerando um arquivo de dados e não queira editá-lo manualmente antes de desenhar o gráfico, ou que queira visualizar sob demanda cada arquivo em um diretório grande de arquivos de dados sem precisar adicionar cabeçalhos manualmente a cada um
Como o post original diz, há uma boa chance de virar um caso em que a quantidade de código necessária fique maior do que implementar diretamente
Algo como chamar
set_third_level_y_ticks()para mudar o tamanho das marcas do terceiro nível no eixo Y. Não estou dizendo que seja necessariamente ruim; talvez não haja como ser diferente, mas dá a sensação de que tudo é tratado como caso especial e de que falta ortogonalidadeAinda assim, respeito a tentativa de criar algo em elisp puro
O fato de esses plots serem SVG e poderem ser levados para LaTeX ou para um navegador também é importante. O primeiro vira um candidato bem forte quando é preciso criar gráficos para inserir em artigos acadêmicos. Belo resultado
Ainda assim, parece que agora o Codeberg finalmente está ganhando alguma tração entre projetos livres e de código aberto
Acabei de abrir a página inicial do github.com e procurei “Microsoft” com Ctrl-F: 0 ocorrências