Como renderizar texto dentro do gráfico de rosca, estou usando ChartJs .
javascript
chart.js
shashisp
fonte
fonte
Nenhuma das outras respostas redimensiona o texto com base na quantidade de texto e no tamanho da rosca. Aqui está um pequeno script que você pode usar para colocar dinamicamente qualquer quantidade de texto no meio e ele será redimensionado automaticamente.
Exemplo: http://jsfiddle.net/kdvuxbtj/
Aceita qualquer quantidade de texto no donut de tamanho perfeito para o donut. Para evitar tocar nas bordas, você pode definir um preenchimento lateral como uma porcentagem do diâmetro do interior do círculo. Se você não definir, o padrão será 20. Você também a cor, a fonte e o texto. O plugin cuida do resto.
O código do plugin começará com um tamanho de fonte básico de 30px. A partir daí, ele irá verificar a largura do texto e compará-lo com o raio do círculo e redimensioná-lo com base na proporção círculo / largura do texto.
Ele tem um tamanho de fonte mínimo padrão de 20 px. Se o texto exceder os limites do tamanho mínimo da fonte, ele quebrará o texto. A altura padrão da linha ao quebrar o texto é 25px, mas você pode alterá-la. Se você definir o tamanho mínimo da fonte padrão como falso, o texto se tornará infinitamente pequeno e não será quebrado.
Ele também tem um tamanho de fonte máximo padrão de 75 px, caso não haja texto suficiente e as letras sejam muito grandes.
Este é o código do plugin
E você usa as seguintes opções em seu objeto gráfico
Agradecemos a @Jenna Sloan pela ajuda com a matemática usada nesta solução.
fonte
Aqui está um exemplo limpo e combinado das soluções acima - responsivo (tente redimensionar a janela), suporta autoalinhamento de animação, suporta dicas de ferramentas
https://jsfiddle.net/cmyker/u6rr5moq/
ATUALIZAÇÃO 17.06.16:
Mesma funcionalidade, mas para chart.js versão 2:
https://jsfiddle.net/cmyker/ooxdL2vj/
fonte
Uncaught TypeError: Cannot read property 'extend' of undefined
alguma ideia?Eu evitaria modificar o código chart.js para fazer isso, uma vez que é muito fácil com CSS e HTML regulares. Esta é minha solução:
HTML:
CSS:
A saída é semelhante a esta:
fonte
Isso também está funcionando no meu fim ...
fonte
Baseie-se na resposta @ rap-2-h, aqui está o código para usar o texto no gráfico de rosca no Chart.js para usar no painel como. Possui tamanho de fonte dinâmico para opção responsiva.
HTML:
Roteiro:
Aqui, o código de amostra. Tenta redimensionar a janela. http://jsbin.com/wapono/13/edit
fonte
Você pode usar css com posicionamento relativo / absoluto se quiser responsivo. Além disso, pode controlar facilmente as linhas múltiplas.
https://jsfiddle.net/mgyp0jkk/
fonte
Isso é baseado na atualização do Cmyker para Chart.js 2. (postado como outra resposta, pois ainda não posso comentar)
Tive um problema com o alinhamento do texto no Chrome quando a legenda é exibida, pois a altura do gráfico não inclui isso, por isso não está alinhado corretamente no meio. Corrigido isso, contabilizando isso no cálculo de fontSize e textY.
Calculei a porcentagem dentro do método, em vez de um valor definido, pois tenho vários deles na página. As suposições são de que seu gráfico tem apenas 2 valores (caso contrário, qual é a porcentagem de? E que o primeiro é aquele para o qual você deseja mostrar a porcentagem. Eu também tenho vários outros gráficos, então faço uma verificação para type = donut. Só estou usando donuts para mostrar as porcentagens, então funciona para mim.
A cor do texto parece um pouco imprevisível dependendo da ordem em que as coisas são executadas, etc., então tive um problema ao redimensionar que o texto mudaria de cor (entre preto e a cor primária em um caso, e a cor secundária e branco em outro). Eu "salvo" qualquer que seja o estilo de preenchimento existente, desenho o texto (na cor dos dados primários) e restauro o estilo de preenchimento antigo. (Preservar o estilo de preenchimento antigo não parece necessário, mas nunca se sabe.)
https://jsfiddle.net/g733tj8h/
Exibir trecho de código
fonte
Você também pode colar o código de mayankcpdixit na
onAnimationComplete
opção:O texto será mostrado após a animação
fonte
save
métodoEu crio uma demonstração com 7 jQueryUI Slider e ChartJs (com texto dinâmico dentro)
DEMO EM JSFIDDLE
fonte
A resposta de @ rap-2-he @Ztuons Ch não permite a
showTooltips
opção de estar ativo, mas o que você pode fazer é criar e colocar em camadas um segundocanvas
objeto atrás daquele que renderiza o gráfico.A parte importante é o estilo exigido nas divs e no próprio objeto de tela para que sejam renderizados um sobre o outro.
Aqui está o jsfiddle: https://jsfiddle.net/68vxqyak/1/
fonte
@Cmyker, ótima solução para chart.js v2
Um pequeno aprimoramento: faz sentido verificar o id do canvas apropriado, veja o snippet modificado abaixo. Caso contrário, o texto (ou seja, 75%) também é renderizado no meio de outros tipos de gráfico na página.
Como uma legenda (ver: http://www.chartjs.org/docs/latest/configuration/legend.html ) aumenta a altura do gráfico, o valor da altura deve ser obtido pelo raio.
fonte
Em primeiro lugar, parabéns por escolher Chart.js! Estou usando em um dos meus projetos atuais e absolutamente adoro - ele faz o trabalho perfeitamente.
Embora rótulos / dicas de ferramentas ainda não façam parte da biblioteca, você pode dar uma olhada nestas três solicitações pull:
E, como o Cracker0dks mencionou, o Chart.js usa
canvas
para renderização, então você também pode implementar suas próprias dicas de ferramentas interagindo com ele diretamente.Espero que isto ajude.
fonte
A solução do Alesana funciona muito bem para mim em geral, mas como outros, eu queria ser capaz de especificar onde ocorrem as quebras de linha. Fiz algumas modificações simples para quebrar as linhas em '\ n' caracteres, desde que o texto já esteja sendo quebrado. Uma solução mais completa forçaria o empacotamento se houver qualquer caractere '\ n' no texto, mas não tenho tempo no momento para fazer isso funcionar com o tamanho da fonte. A mudança também centra um pouco melhor horizontalmente ao embrulhar (evita espaços residuais). O código está abaixo (não posso postar comentários ainda).
Seria legal se alguém colocasse este plug-in no GitHub ...
fonte