Comments (7)
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.
Legal, gostei da sugestão.
from radar.
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.
Por hora, para que possamos mostrar o gráfico das duas casas, deixei todas as circunferências do mesmo tamanho.
3bb4c44
from radar.
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.
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.
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)
- Migrar cache para utilizar Memcache ao invés de arquivos em disco. HOT 2
- Gerar nova imagem docker no Travis
- Automatizar build do Dockerfilebase HOT 2
- Melhorar a qualidade da busca por palavras-chaves HOT 7
- Atualizar lista de partidos HOT 11
- Radar na academia HOT 4
- Exibir a porcentagem da variância explicada pelas duas dimensões do mapa de votações HOT 13
- Utilizar o cleanup do entrypoint na saída do container.
- Incorporar rotinas periódicas no Docker para produção. HOT 12
- Fazer novo diagrama de implantação considerando Docker HOT 2
- ANO_MIN em cmsp.py HOT 2
- Colocar "chamada" para o artigo da Leviathan na home page HOT 3
- Rotina periódica para dump do banco HOT 12
- Rotina periódica para atualizar o cash HOT 1
- Existe alguma API que retornar as ações parlamentares de um determinado candidato? HOT 3
- Listar votações, mesmo sem filtro HOT 2
- Exportar gráfico
- Importador não funcionando? HOT 6
- Buscas por palavras-chave não funcionando. HOT 3
- Importador do senado está quebrado HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from radar.