Quiero dibujar un gráfico de barras horizontales con Chart.js pero sigue escalando el gráfico en lugar de usar la altura que le asigno al lienzo del script.
¿Hay alguna forma de establecer la altura del gráfico a partir del script?
Ver violín: 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
fuente
fuente
Si desactiva la relación de aspecto de mantenimiento en las opciones, entonces usa la altura disponible:
fuente
destroy()
el gráfico y luego lo crea de nuevo en el mismo lienzo por segunda vez, la altura del lienzo puede desordenarse después de la destrucción y debe volver a aplicarse antes de la creación. Sin embargo, puede evitar destruir y usar elupdate
método en su lugar, si no cambia las opciones.La forma más fácil es crear un contenedor para el lienzo y establecer su altura:
y establecer
fuente
maintainAspectRatio
quefalse
en las opciones de la gráfica, de lo contrario elheight
asignar a través delstyle
atributo será en realidad no tenga efecto.responsive
opción estrue
. Detalles: chartjs.org/docs/latest/general/…height
propiedad debe estar en un elemento padre y no en el lienzoPuede envolver su elemento de lienzo en un div padre, relativamente posicionado, luego darle a ese div la altura que desee, estableciendo keepAspectRatio: false en sus opciones
fuente
Este me funcionó:
Establezco la altura desde HTML
Luego lo deshabilité para mantener la relación de aspecto
fuente
El tiene razón. Si quieres quedarte con jQuery puedes hacerlo
o
fuente
Establecer la propiedad AspectRatio de la tabla a 0 hizo el truco para mí ...
fuente
Debe usar el atributo de altura html para el elemento de lienzo como:
fuente
Creé un contenedor y lo configuré en la altura deseada del puerto de vista (dependiendo del número de gráficos o tamaños específicos de gráficos):
Para ser dinámico a los tamaños de pantalla, configuro el contenedor de la siguiente manera:
Por supuesto, es muy importante (como se ha mencionado en numerosas ocasiones) establecer las siguientes
option
propiedades de su gráfico:fuente
También puede establecer las dimensiones en el lienzo.
Y luego configure las opciones de respuesta en falso para mantener siempre el gráfico en el tamaño especificado.
fuente
Necesitaba el gráfico para llenar el elemento primario al 100%, en lugar de establecer la altura manualmente, y el problema era obligar al div primario a llenar siempre el espacio restante.
Después de configurar las opciones de respuesta y proporción (consulte el documento chartjs relacionado ), el siguiente CSS hizo el truco:
html
scss:
fuente
Solo para agregar a la respuesta dada por @numediaweb
En caso de que te golpees la cabeza contra la pared porque después de seguir las instrucciones para configurar
maintainAspectRatio=false
: Originalmente copié mi código de un ejemplo que obtuve en un sitio web sobre el uso de Chart.js con Angular 2+:Para que esto funcione correctamente, debe eliminar el incrustado (e innecesario)
style="display: block"
En su lugar, defina una clase para el div que lo encierra y defina su altura en CSS.Una vez que haga eso, el gráfico debe tener un ancho sensible pero una altura fija.
fuente