1 pontos por GN⁺ 2024-06-28 | 1 comentários | Compartilhar no WhatsApp
  • 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.el e 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 eplot em um buffer com muitos números, um buffer de gráfico é aberto, e com headers e C-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.el embutido no Emacs ao escrever um texto sobre avaliações de filmes
  • O chart.el vem incluído no Emacs, mas originalmente surgiu como uma ferramenta de teste do eieio, 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.00002 e 1e9~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 chart já 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 eplot em 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-c para ver imediatamente o resultado
    • Também existe um eplot mode para facilitar esse processo
  • 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.md documentando 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

 
GN⁺ 2024-06-28
Opiniões no Hacker News
  • Bem legal! A forma como colocaram o gradiente é simples e engenhosa
    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
  • Então era por isso que eu não estava encontrando recentemente aquele texto sobre “corrigir 10% dos bugs do Emacs”. Ele estava fazendo isto. Incrível, um verdadeiro mestre do Emacs
  • Parece ótimo! Usar o recurso de variáveis locais de arquivo e diretório do Emacs para configurar os gráficos poderia proporcionar uma experiência de usuário mais flexível
    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
  • Ao desenhar gráficos no org mode, também dá para usar Python e matplotlib. Não é só Gnuplot
    • A API do Matplotlib já é bastante inconveniente, e não acho que colocar um wrapper em elisp por cima vá transformar isso em algo agradável de usar
      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
    • O que sempre me incomoda em matplotlib e gnuplot é que parece haver, literalmente, um comando ou chamada de função separado para tudo
      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 ortogonalidade
    • Também existe o ESS (Emacs Speaks Statistics). Ele integra fortemente R/Julia ao org-mode, então dá para usar coisas como ggplot2 ou makie
      Ainda assim, respeito a tentativa de criar algo em elisp puro
    • Também dá para usar R e suas bibliotecas gráficas
  • Hack de verdade. Gosto especialmente da parte do gradiente
    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
  • Foi a primeira vez que vi as duas palavras “Microsoft Github” coladas de forma tão explícita, e, independentemente de quantos anos já faça desde que isso virou realidade, me dá um desconforto
    • Ainda não entendo por que tantos projetos livres e de código aberto continuam usando essa plataforma. O GitHub teve muito sucesso em fazer as pessoas não enxergarem o prefixo Microsoft
      Ainda assim, parece que agora o Codeberg finalmente está ganhando alguma tração entre projetos livres e de código aberto
    • Por isso acho que o GitHub ainda tenta parecer aquela antiga startup independente. Muitos desenvolvedores independentes sentem algo parecido e tendem mais aos valores de liberdade de software do que ao valor para acionistas ou ao capitalismo das big techs
      Acabei de abrir a página inicial do github.com e procurei “Microsoft” com Ctrl-F: 0 ocorrências
    • Minha reação foi exatamente a mesma. Espero que um dia não façam um rebranding para MS GitHub