174 votes

Définir la hauteur du graphique dans Chart.js

Je veux dessiner un graphique à barres horizontales avec Chart.js mais il continue de dimensionner le graphique au lieu d'utiliser la hauteur que j'attribue au canvas depuis le script.

Y a-t-il un moyen de définir la hauteur du graphique à partir du script ?

Voir fiddle : Jsfidle

HTML

JavaScript

var ctx = $('#myChart');

ctx.height(500);

var myChart = new Chart(ctx, {
    type: 'horizontalBar',
    data: {
        labels: ["Rouge", "Bleu", "Jaune", "Vert", "Violet", "Orange"],
        datasets: [{
            label: '# de 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
                }
            }]
        }
    }
});

0 votes

Vous pouvez mettre à jour le rapport hauteur vs largeur de votre graphique avec cette solution stackoverflow.com/questions/40594025/…

417voto

numediaweb Points 2027

Si vous désactivez le maintien du rapport hauteur/largeur dans les options, alors il utilise la hauteur disponible :

var chart = new Chart('blabla', {
                type: 'bar',
                data: {
                },
                options: {
                    maintainAspectRatio: false,
                }
            });

0 votes

Oui! Cela fonctionne très bien. Merci pour ce conseil. Meilleures salutations mec.

20 votes

Pourquoi cette réponse n'est-elle pas acceptée? Fonctionne parfaitement

3 votes

De manière intéressante, si vous destroy() le graphique puis le recréez 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 la destruction et utiliser la méthode update à la place, si vous ne modifiez pas les options.

144voto

bibamann Points 364

La manière la plus simple est de créer un conteneur pour le canvas et de définir sa hauteur :

et définir

options: {  
    responsive: true,
    maintainAspectRatio: false
}

24 votes

Merci pour cela, la clé ici est de définir maintainAspectRatio sur false dans les options du graphique, sinon la hauteur attribuée via l'attribut style n'aura en fait aucun effet.

2 votes

La suggestion de Ben est en or.

0 votes

La valeur par défaut de l'option responsive est true. Détails: chartjs.org/docs/latest/general/…

85voto

Riscie Points 1554

Il semble que var ctx = $('#myChart'); renvoie une liste d'éléments. Vous devriez faire référence au premier en utilisant ctx[0]. De plus, height est une propriété, pas une fonction.

Je l'ai fait de cette façon dans mon code :

var ctx = document.getElementById("myChart");
ctx.height = 500;

5 votes

@MattSaunders C'est en pixels.

1 votes

Veuillez mettre à jour pour renommer ctx en quelque chose comme elem ou autre chose que ctx car la plupart des exemples utilisent var ctx = document.getElementById(canvasId).getContext('2d'); ce qui est simplement déroutant alors...

0 votes

Pour jQuery: $("#myChart").css("height",500);

17voto

Geoff Kendall Points 123

Vous pouvez envelopper votre élément canvas dans une div parent, positionnée de manière relative, puis donner à cette div la hauteur souhaitée, en définissant maintainAspectRatio: false dans vos options

//HTML

new Chart(somechart, {
options: {
    responsive: true,
    maintainAspectRatio: false

/*, vos autres options*/

}
});

0 votes

Selon la documentation sur le site Web de Chart.js, ceci semble être la bonne approche.

15voto

illusionist Points 4634

Celui-ci a fonctionné pour moi :

J'ai défini la hauteur depuis le HTML

canvas#scoreLineToAll.ct-chart.tab-pane.active[height="200"]
canvas#scoreLineTo3Months.ct-chart.tab-pane[height="200"]
canvas#scoreLineToYear.ct-chart.tab-pane[height="200"]

Ensuite, j'ai désactivé le maintien du rapport hauteur/largeur

options: {
  responsive: true,
  maintainAspectRatio: false,

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X