Comparação entre d3.js e chart.js (apenas para gráficos) [fechado]


88

Usei chart.js em meus projetos várias vezes, mas nunca usei d3.js. Muitas pessoas dizem que d3.js é a melhor estrutura javascript para gráficos, mas nenhum deles é capaz de explicar o porquê, especialmente quando quero uma comparação com chart.js.

Eu encontrei isto: http://www.fusioncharts.com/javascript-charting-comparison/ mas não é o que eu estava procurando.

Alguém sabe de uma comparação desses frameworks em termos de usabilidade e desempenho (somente para gráficos)?


1
Apenas por diversão, estou desenvolvendo gráficos básicos chart.js usando d3.js com o mesmo conjunto de dados. Você pode dar uma olhada - s.codepen.io/bumbeishvili/debug/RGbvPg
— bumbeishvili

A atualização 2018 d3 também tem canvas
— PirateApp de

Respostas:


215

d3.jsnão é uma biblioteca de "gráficos". É uma biblioteca para criar e manipular SVG / HTML. Ele fornece ferramentas para ajudá-lo a visualizar e manipular seus dados. Embora você possa usá-lo para criar gráficos convencionais (barra, linha, pizza, etc ...), ele é capaz de muito mais. É claro que com esse "capaz de tanto" vem uma curva de aprendizado mais íngreme. Há uma série de bibliotecas de gráficos convencionais construídas em cima de d3.js- nvd3.js, dimple.js, dc.jsse você quiser ir por esse caminho.

Não estou familiarizado com Chart.js mas uma rápida olhada no site me diz que é mais uma biblioteca de gráficos corriqueira. Ele suporta 6 tipos básicos de gráfico e você não está indo cada vez para fazer coisas como esta com ele . Mas a API parece simples e tenho certeza de que é fácil de usar.

Fora isso, a distinção mais óbvia entre os dois é que Chart.jsé baseado em canvas, enquanto se d3.jstrata principalmente de SVG. (Agora eu digo principalmente porque d3.jspode manipular todos os tipos de elementos HTML, então você pode até mesmo usá-lo para ajudá-lo a desenhar em uma tela.) Em geral, a tela executa SVG para um grande número de elementos (estou falando de muito grande - milhares de pontos, linhas, etc ...). O SVG, por outro lado, é mais fácil de manipular e interagir. Com o SVG, cada ponto, linha, etc. torna-se parte do DOM - você quer aquele ponto verde agora, basta alterá-lo. Com o canvas, é um desenho estático que deveria ser redesenhado para fazer qualquer alteração - é claro que desenha tão rápido que você normalmente nem notará. Aqui estão algumas boas leituras da Microsoft.


6
@emrah, o link pode ser antigo (na época do IE9), mas as informações fornecidas ainda são muito relevantes.
— Marque

36

Como estou tentando encontrar uma biblioteca de gráficos rápida para mostrar gráficos em dispositivos móveis, o desempenho foi importante para mim. Também precisava de uma licença que possibilitasse o uso comercial. Eu comparei:

  1. c3, que é baseado em d3 e, portanto, usa SVG
  2. chart.js que está usando canvas

Os gráficos são carregados dentro de um componente WebView dentro de um aplicativo nativo e todos os dados (incluindo a biblioteca JS) são locais, portanto, não há lentidão devido a solicitações http. Para maximizar ainda mais o desempenho, adicionalmente coloquei tudo dentro de um único arquivo.

Carreguei 4 gráficos (linha, barra, pizza, combinação de linha / barra) com cerca de 500 pontos de dados.

Minha medição de tempo excluiu o carregamento real da página html. Medi desde o momento em que comecei a usar o código da biblioteca de gráficos até o final da renderização. Toda a animação do gráfico foi desligada.

C3 levou cerca de 1500-1800 ms em dispositivos Android e IPhone modernos. O iPhone teve um desempenho cerca de 100 ms melhor do que o Android.

Chart.js demorou cerca de 400-800ms. O Android teve um desempenho cerca de 300ms melhor do que o iPhone.

Sem surpresa, o SVG é mais lento. Dependendo do seu caso de uso, talvez muito lento.

Em um computador desktop, a renderização em c3 era em torno de 150-200ms e charts.js em torno de 80-100ms. Executar o mesmo teste no emulador do Android e iPhone teve o mesmo resultado que no desktop. Portanto, a lentidão em dispositivos móveis é definitivamente devido aos limites de hardware / processamento.

espero que ajude



0
    chart.js
  • Ele usa a tag canvas html5 que depende do pixel, então quando você redimensiona o gráfico gerado pelo chart.js você perde clareza
  • É declarativo, significa que você deve apenas declarar as entradas necessárias para gerar o gráfico
  • Curva de aprendizado é menor
  • Os tipos de gráficos gerados são predefinidos e limitados
    d3.js
  • Ele usa svg que é independente da resolução, então quando você redimensionar o gráfico gerado pelo d3 você não perderá a clareza
  • É imperativo, significa que você tem que escrever alguma lógica para gerar gráficos
  • Curva de aprendizado íngreme
  • Os tipos de gráficos gerados não são predefinidos e você pode criar qualquer gráfico que desejar
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.