Eu quero desenhar um gráfico de barras horizontal com o Chart.js, mas ele continua dimensionando o gráfico em vez de usar a altura que atribuo à tela do script.
Existe alguma maneira de definir a altura do gráfico a partir do script?
Veja o violino: Jsfidle
HTML
<div class="graph">
<div class="chart-legend">
</div>
<div class="chart">
<canvas id="myChart"></canvas>
</div>
</div>
Javascript
var ctx = $('#myChart');
ctx.height(500);
var myChart = new Chart(ctx, {
type: 'horizontalBar',
data: {
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255,99,132,1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
maintainAspectRatio: false,
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
}
}
});
javascript
jquery
chart.js
Vincent T
fonte
fonte
Se você desativar a proporção de aspecto de manutenção nas opções, ela usará a altura disponível:
fonte
destroy()
criar o gráfico e criá-lo novamente na mesma tela, na segunda vez, a altura da tela poderá ser alterada após a destruição e precisará ser reaplicada antes da criação. No entanto, você pode evitar a destruição e usar oupdate
método, se não alterar as opções.A maneira mais fácil é criar um contêiner para a tela e definir sua altura:
E definir
fonte
maintainAspectRatio
afalse
nas opções do gráfico, caso contrário oheight
atribuída através dastyle
atributo não vai realmente fazer efeito.responsive
opção étrue
. Detalhes: chartjs.org/docs/latest/general/…height
propriedade deve ser em um elemento pai e não na telaVocê pode agrupar seu elemento de tela em uma div pai, relativamente posicionada, e então fornecer a div a altura desejada, definindo keepAspectRatio: false em suas opções
fonte
Este funcionou para mim:
Eu defino a altura do HTML
Então eu desabilitei para manter a proporção
fonte
Ele tem razão. Se você quiser ficar com o jQuery, poderá fazer isso
ou
fonte
Defina a propriedade aspectRatio do gráfico como 0 fez o truque para mim ...
fonte
Você deve usar o atributo de altura html para o elemento canvas como:
fonte
Criei um contêiner e configurei a altura desejada da porta de visualização (dependendo do número de gráficos ou tamanhos específicos de gráficos):
Para ser dinâmico em tamanhos de tela, defino o contêiner da seguinte maneira:
É claro que muito importante (como já foi mencionado várias vezes) defina as seguintes
option
propriedades do seu gráfico:fonte
Você também pode definir as dimensões para a tela
E defina as opções responsivas como false para sempre manter o gráfico no tamanho especificado.
fonte
Precisava que o gráfico preenchesse o elemento pai 100%, em vez de definir a altura manualmente, e o problema era forçar a divisão pai a preencher sempre o espaço restante.
Após definir as opções de resposta e proporção (consulte o documento chartjs relacionado ), o seguinte css fez o truque:
html
scss:
fonte
Apenas para adicionar à resposta dada por @numediaweb
Caso você esteja batendo com a cabeça na parede, porque depois de seguir as instruções para definir
maintainAspectRatio=false
: originalmente eu copiei meu código de um exemplo que recebi em um site usando o Chart.js com Angular 2+:Para fazer isso funcionar corretamente, você deve remover o incorporado (e desnecessário)
style="display: block"
Em vez disso, defina uma classe para a div envolvente e defina sua altura no CSS.Depois de fazer isso, o gráfico deve ter largura responsiva, mas altura fixa.
fonte