Je veux dessiner un graphique à barres horizontales avec Chart.js, mais il continue à mettre à l'échelle le graphique au lieu d'utiliser la hauteur que j'attribue au canevas du script.
Existe-t-il un moyen de définir la hauteur du graphique à partir du script?
Voir violon: 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
la source
la source
Si vous désactivez le maintien des proportions dans les options, il utilise la hauteur disponible:
la source
destroy()
créez le graphique et que vous le créez à nouveau sur le même canevas une deuxième fois, la hauteur du canevas peut être altérée après la destruction et doit être réappliquée avant la création. Cependant, vous pouvez éviter de détruire et utiliser laupdate
méthode à la place, si vous ne modifiez pas les options.Le moyen le plus simple est de créer un conteneur pour le canevas et de définir sa hauteur:
Et mettre
la source
maintainAspectRatio
pourfalse
les options du graphique, sinon l'height
attribué par l'style
attribut prendra effet pas réellement.responsive
option esttrue
. Détails: chartjs.org/docs/latest/general/…height
propriété doit être sur un élément parent et non sur la toileVous pouvez envelopper votre élément de canevas dans un div parent, positionné de manière relative, puis donner à ce div la hauteur souhaitée, en définissant keepAspectRatio: false dans vos options
la source
Celui-ci a fonctionné pour moi:
J'ai défini la hauteur à partir du HTML
Ensuite, j'ai désactivé pour maintenir le rapport hauteur / largeur
la source
Il a raison. Si vous voulez rester avec jQuery, vous pouvez le faire
ou
la source
Définir la propriété aspectRatio du graphique sur 0 a fait l'affaire pour moi ...
la source
Vous devez utiliser l'attribut html height pour l'élément canvas comme:
la source
J'ai créé un conteneur et l'ai défini à la hauteur souhaitée du port de vue (en fonction du nombre de graphiques ou de tailles spécifiques aux graphiques):
Pour être dynamique aux tailles d'écran, j'ai défini le conteneur comme suit:
Bien sûr, il est très important (comme cela a été mentionné à plusieurs reprises) de définir les
option
propriétés suivantes de votre graphique:la source
Vous pouvez également définir les dimensions du canevas
Ensuite, définissez les options réactives sur false pour toujours conserver le graphique à la taille spécifiée.
la source
Il fallait que le graphique remplisse l'élément parent à 100%, plutôt que de définir la hauteur manuellement, et le problème était de forcer le div parent à toujours remplir l'espace restant.
Après avoir défini les options responsive et ratio (consultez la documentation relative à chartjs ), le css suivant a fait l'affaire:
html
scss:
la source
Juste pour ajouter à la réponse donnée par @numediaweb
Au cas où vous vous cogneriez la tête contre le mur parce qu'après avoir suivi les instructions pour définir
maintainAspectRatio=false
: j'ai initialement copié mon code à partir d'un exemple que j'ai obtenu sur un site Web sur l'utilisation de Chart.js avec Angular 2+:Pour que cela fonctionne correctement, vous devez supprimer les éléments incorporés (et inutiles).
style="display: block"
Définissez plutôt une classe pour le div englobant et définissez sa hauteur en CSS.Une fois que vous faites cela, le graphique doit avoir une largeur réactive mais une hauteur fixe.
la source