C3: Compatibilidade D3 4.0

Criado em 12 abr. 2016  ·  30Comentários  ·  Fonte: c3js/c3

Existe compatibilidade com D3 4.0?

C-feature-request question

Comentários muito úteis

há alguma atualização para esses problemas?

Todos 30 comentários

Acabei de instalar o C3 na versão 0.4.11-rc4 e o D3 na versão 4.0.0-alpha.29 e parece que não funciona. :(

Não, não funciona, existem algumas alterações importantes no D3 4.0 e, como tal, exigirá que as chamadas c3.js sejam atualizadas também.

Veja aqui para referência:

a versão 4.0 significa que é uma versão principal e não compatível com versões anteriores.

https://github.com/visfest/topics2015/blob/master/d3-v4.md

Interessante. Talvez esta seja uma boa oportunidade para reescrever grande parte da base de código para ser mais modular, como estou pesquisando em meu fork do Webpack . Como tudo agora está usando importações ES6 com Rollup em D3, pode ser muito inteligente habilitar coisas como trepidação de árvore com C3 por meio de um melhor uso de módulos.

Dito isso, estou longe de ser um profissional de padrão de design JS - se você olhar para o meu fork, basicamente importei cada arquivo como CommonJS, mantendo como o processo de concatenação constrói a biblioteca. Qualquer sugestão de como refatorar para ser mais modular seria muito apreciada.

Tenho pensado em fazer o fork do c3, estou usando-o intensamente para ferramentas internas e mantive ativamente minha própria versão dele. Tive que corrigir muitos bugs nele e, infelizmente, sabia que qualquer commit neste repositório não seria aceito.

Algumas das coisas que adicionei são o cache de atributos e seletores, esse desempenho aprimorado em duas vezes nos métodos de redesenho do gráfico e renderização inicial. Também precisei adicionar recursos como a capacidade de renderizar gráficos de gradiente e dicas de ferramentas melhores. Incontáveis ​​outras correções não documentadas que tive que implementar enquanto usava esta biblioteca.

Faria sentido ter c3.core e, em seguida, todos os gráficos podem ser incluídos para produzir uma construção super enxuta, essencialmente tendo o usuário apenas para exigir a biblioteca central e os gráficos de que precisa, no meu caso, estou usando apenas 4 dos gráficos em c3.

Sem mencionar as melhorias D3-4.0 que poderiam ser incluídas no c3. De qualquer forma, posso reclamar sobre esta biblioteca, mas é uma das melhores que existem, mas infelizmente não podemos contribuir com esta.

Eu brinquei com c3 e d3 @ v4. Alguns namespaces d3 principais não existem mais (d3.behavior, por exemplo), então não pude superar isso.

No entanto, eu consigo obter alguma doçura Rollup substituindo as tarefas concat e d3 smash do c3 para usar importações e exportações ES6. Isso não deixa muito espaço para três sacudidas, mas ainda não terminei de mexer.

@abacaj, o que fiz no passado foi um fork em uma organização que fiz apenas para manter meus projetos de código aberto e forks de longo prazo: https://github.com/huaofoundrie. Se você estiver interessado, diga-me e eu lhe darei permissões de administrador para que possamos manter o nextgen c3 a partir daí

@abacaj e @amenadiel Olá! Por favor, não desista ainda - estou planejando fazer uma grande parte do trabalho na fila de problemas e em outros lugares para realmente tentar obter a versão 0.4.11 o mais rápido possível.

Depois disso, estaremos realmente procurando colocar muito do que você mencionou na biblioteca para um novo lançamento de recurso, esperançosamente iterando muito mais rápido no futuro. Eu adoraria envolver vocês dois de alguma forma ( @abacaj , seus pensamentos sobre: ​​c3.core estão certos, estou pensando em como fazer exatamente isso nos últimos dias); alguma chance de você estar disposto a empurrar seus garfos particulares para algum lugar para que eu possa dar uma olhada e talvez documentar / creditar o que você fez ao resolver quaisquer problemas que tenha encontrado?

Obrigado! 😄

Com certeza

@amenadiel Isso é fantástico - você se importaria de empurrar seus experimentos para algum lugar? Seria bom ver outra abordagem sobre como poderíamos modularizar melhor a base de código. Definitivamente precisa disso, estou tão farto de ter que concatenar continuamente o código-fonte ...

Vou fazer um POC um dia desses

parece que a v4 foi lançada oficialmente . seria ótimo ver essa atualização disponibilizada através do c3

Concordo com @travi e confirmo que pelo menos o primeiro exemplo de "inicialização" não funciona com o d3 4.0.0. Está tudo bem para mim agora, eu uso a versão d3 3.5.0 sugerida pelo bower, mas seria ótimo ter toda a versão atualizada e funcionando corretamente.

@alundiak et al, definitivamente não funcionará como está com o 4.0. D3 v4 tem um namespace totalmente diferente e não é compatível com versões anteriores. Atualizar para a v4 é uma tarefa nada trivial.

Estou começando outras abordagens. Separar c3 em módulos es6 pode ajudar.

Minha primeira abordagem, usando um shim ES6 para d3, está passando a maior parte do teste, mas ainda há muito trabalho até que tornemos a estrutura da pasta coerente com a estrutura do módulo.

Pelo menos Chart, Chartinternal e Axis devem ser três módulos separados. Alguns métodos estáticos dos módulos mencionados acima devem se tornar métodos por si próprios.

Fiz um PR com o resultado dos meus experimentos até agora: https://github.com/c3js/c3/pull/1765

Isso não inclui nenhuma alteração em d3. Essa mudança, que significa usar um esqueleto d3 @ 3 mínimo e um monkey patch com submódulos d3 @ 4 , será construída com base no # 1765.

há alguma atualização para esses problemas?

Sem a atualização para a versão 4 do D4 não posso mais usar esta lib: /

@Niondir Por curiosidade, por que isso acontece? O V4 não traz grandes mudanças em funcionalidade ou estabilidade para D3. A menos que você queira usar D3 v4 em outro lugar em seu projeto (e a versão do C3 está causando um conflito), a versão do D3 que o C3 usa não deveria importar tanto ... Concedido, se eu estiver errado nessa suposição , informe-me, pois isso pode aumentar a pressão para avançar com a atualização v4.

Independentemente disso, estou olhando para o extenso PR de @amenadiel no nº 1765 esta semana, e posso usar isso como base para atualizar para V4 para C3 v1. Por favor, todos tenham paciência, este é provavelmente o problema menos trivial em toda a fila agora. 😄

Só me lembro de alguns problemas com a ausência da função merge () no seletor.

@Niondir Ok, a v4 tem selection.merge , enquanto a v3 não tem - mas como isso afeta seu uso diário da biblioteca? Se você não estiver usando o D3 fora do C3, não haverá nenhum benefício tangível em usar o v4 até que atualizemos a biblioteca. Não me interpretem mal, há uma série de boas razões para atualizarmos para a v4 no contexto do desenvolvimento C3 (compilações personalizadas e tamanho reduzido da biblioteca entre eles), mas da perspectiva do usuário final, não entendo o desejo no momento. Qualquer informação adicional sobre seu caso de uso será bem-vinda! 😄

um problema do qual queremos aproveitar é a análise de data e hora na v4. A v3 não oferece suporte a milissegundos com fidelidade de deslocamento TZ para datas ISO-8601, mas a v4 sim. nós usamos os formatadores d3 fora do c3, mas não podemos tirar proveito da análise aprimorada sem carregar as duas versões.

Saúde, @travi , isso é útil. : +1:

Se você instalasse apenas d3-time-format como uma biblioteca separada e processasse os dados com ela, passando-os para o C3, funcionaria? Se não, essa é uma boa história de usuário inicial para começarmos.

Admito que já faz algum tempo que não penetrei o suficiente nessa parte do nosso sistema, então não tenho mais a cabeça em volta disso, mas parece que isso nos levaria perto.

tenho quase certeza de que desisti de atualizar nossos outros formatadores porque não parecia haver uma maneira de trocar o analisador que c3 estava usando para analisar data.json passado para .generate() . se houvesse uma maneira de obter tanto usando os analisadores v4, acho que seria um bom passo na direção certa para nosso caso de uso.

Apenas jogando meu caso de uso na mistura.

Nossa implementação requer o D3 Pack Layout, que foi atualizado para funcionar muito melhor na versão 4.

Do changelog:

O layout de empacotamento em círculo, d3.pack, foi completamente reescrito para melhor implementar o algoritmo de Wang et al., Corrigindo os principais bugs e melhorando os resultados! O algoritmo de Welzl agora é usado para calcular o menor círculo envolvente exato para cada pai, em vez da resposta aproximada usada por Wang et al.

Estou tentando implementar C3.js em vez de tentar escrever gráficos manualmente. No entanto, este é um problema para esse switch.

Não estou tentando criticar o C3.js, reconheço totalmente a tarefa que seria atualizar para o D3 V4. Apenas fornecendo nosso cenário, caso ajude a tomar uma decisão sobre esse problema específico.

Obrigado cara!

@beaudesigns Saúde, isso é muito útil.

Vou criar uma solicitação de pull de WIP com o que fiz até agora com a v1, e podemos trabalhar nisso até que esteja pronto para mesclar. Estou reconhecidamente muito ocupado tanto com a eleição quanto com o livro em que estou trabalhando, mas adoraria se as pessoas que estão dispostas a ajudar a impulsionar isso pudessem contribuir.

Existe alguma atualização sobre isso? Parece que o trabalho para tornar o C3 compatível com o D3 v4 estagnou um pouco.

Qual é o status deste problema? Tenho Cannot read property 'format' erro para D3 4.x

O mesmo aqui, mas estamos dispostos a ajudar na migração se os mantenedores nos disserem o que é mais valioso para eles na migração. Obrigado novamente pelo excelente trabalho!
Felicidades,

Estou trabalhando nisso no # 2246. Ainda são necessárias algumas correções, mas basicamente parece funcionar bem.

Suporte para D3 v4 adicionado por https://github.com/c3js/c3/commit/ccff119809de05a68ff3e33521a79566bf12b903 e deve estar disponível na versão 0.5.0 .

encontrei um problema no medidor quando atualizei o C3JS para o mais recente. Aqui está https://github.com/c3js/c3/issues/2390

Esta página foi útil?
0 / 5 - 0 avaliações