GithubHelp home page GithubHelp logo

Comments (7)

diraol avatar diraol commented on May 27, 2024

Léo, talvez tenhamos que definir um tamanho máximo e um tamanho mínimo previamente e interpolar entre estes extremos.
Desse ponto de vista, na hora de plotar o gráfico também seria interessante fazer com que a "margem interna" da área do gráfico seja igual ao maior raio. Dessa forma os círculos sempre estarão completamente visíveis.

from radar.

leonardofl avatar leonardofl commented on May 27, 2024

Legal, gostei da sugestão.

from radar.

saulotrento avatar saulotrento commented on May 27, 2024

Eu sou da opinião de que a área da circunferência deve a todo custo ser (diretamente) proporcional à variável que ela representa; no caso, ao tamanho do partido. Fazer diferente disso seria para mim como manipular o gráfico. Nós queremos em primeiro lugar que o gráfico reflita os dados e, em segundo lugar, se possível, que fique visualmente agradável. Não o contrário.

Nesse espírito, supondo que o algoritmo está fazendo raios proporcionais à raiz do tamanho do partido (não conferi, mas é o que fazia na cmsp e em todos os gráficos anteriores que fizemos da câmara dos deputados), considero que a solução é reduzir o tamanho das circunferências de todos os partidos, inclusive dos partidos menores. Eu não acho que elas estão no tamanho mínimo aceitável, e considero aceitável se o número do partido não couber no interior do círculo. Como já existe o número para chamar atenção para a posição do partido, o tamanho mínimo aceitável seria para mim um ponto de um ou dois pixels mesmo, se necessário, e acho que nem será necessário fazer tão pequeno.

Resumindo, basta multiplicar todos os raios por um fator de escala F, que neste caso seria menor que 1.

Agora uma sugestão de algoritmo para definir F: Fixemos uma área total desejada, igual à soma das áreas de todos os círculos a serem apresentadas (com fator F já aplicado). A menos de uma constante pi, esta área é igual à soma dos quadrados dos raios dos círculos. Então determina-se F pela fórmula:

F = Área total desejada / soma(raios originais dos círculos, ao quadrado)

E os novos raios serão:

Raio novo = F * Raio antigo

Para evitar problemas com bordas, verifica-se neste momento se algum raio novo está grande demais, e se estiver usa-se um fator F menor, tal que o maior raio não seja maior que Rmáx, igual ao tamanho das bordas.

Pode-se fazer alguns testes alterando a constante "Área total desejada" até obter um gráfico bonito, e uma vez determinada esta constante provavelmente qualquer outro gráfico também vai ficar bom com a mesma constante.

OBS: Aproveitando o assunto, é imprescindível fazer a área de plotagem QUADRADA, pois os eixos devem ser equivalentes, e plotar em uma área retangular da forma como está sendo feito distorce as distâncias, e se for plotado de uma forma que não as distorça mesmo assim haverá um efeito visual indesejável de diferenciação entre os eixos.

from radar.

leonardofl avatar leonardofl commented on May 27, 2024

Por hora, para que possamos mostrar o gráfico das duas casas, deixei todas as circunferências do mesmo tamanho.
3bb4c44

from radar.

saulotrento avatar saulotrento commented on May 27, 2024

Resolvi parcialmente, adotando a solução que descrevi antes. Aqui vão alguns detalhes:

  • Os círculos estavam sendo desenhados com raio proporcional ao N do partido. Como expus acima, o correto é sqrt(N). Isso resolve aquele aparente problema de partidos aparecerem pequenos demais e outros grandes demais: o que estava acontecendo era que os partidos grandes estavam sendo plotados "grandes ao quadrado"!
  • Para a cmsp os círculos estavam todos do mesmo tamanho, raio=11, exceto Sem Partido, que estava com raio=17. O plotador em javascript estava pegando o tamanho do partido e somando 11 (supostamente para não ter círculos pequenos demais), mas os tamanhos dos partidos para a cmsp estão vindo todos iguais a zero (devido a algum bug não identificado!), exceto Sem Partido, que misteriosamente está vindo como de tamanho 6. (!!) Corrigindo isso, o gráfico da cmsp deve também ficar agradável para visualização (mas não tive como testar).
  • A área total que escolhi (a menos da constante pi) foi 4000. Para alterar este parâmetro e ver se o gráfico fica melhor com círculos maiores ou menores, alterar a variável fator_de_escala_de_tamanho, em analise.py, que ficou na linha 338.
  • O "tamanho do partido" que está sendo passado via json é agora um float meramente proporcional ao tamanho do partido, e não mais o número de parlamentares daquele partido. Isso é ruim porque logo logo vamos querer uma funcionalidade de por exemplo passar o mouse em cima do partido para ver o número de parlamentares que ele tem ali, então o json precisaria ter essa informação. O ideal seria o json conter os inteiros com tamanhos dos partidos e além disso uma informação de fator de escala, que é um fator único para todos os partidos e todos os períodos daquele json.

from radar.

leonardofl avatar leonardofl commented on May 27, 2024

mas os tamanhos dos partidos para a cmsp estão vindo todos iguais a zero (devido a algum bug não identificado!)

eu que fiz isso, pra retirar a funcionalidade de tamanho de partido no gráfico pra gente poder por em produção a página da câmara dos deputados. A classe q gera o json atribui zero ao tamanho do partido (esa foi minha alteração).

from radar.

leonardofl avatar leonardofl commented on May 27, 2024

A julgar pela versão em produção parece q estamos OK em relação isso. Se alguém achar q não, só gritar e reabrir o issue.

from radar.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.