Chart.js에서 차트 높이 설정


138

Chart.js를 사용하여 가로 막대 차트를 그리려고하지만 캔버스에서 스크립트로 지정한 높이를 사용하는 대신 차트의 배율을 계속 조정합니다.

스크립트에서 그래프의 높이를 설정하는 방법이 있습니까?

바이올린보기 : Jsfidle

HTML

<div class="graph">
  <div class="chart-legend">

  </div>
  <div class="chart">
    <canvas id="myChart"></canvas>
  </div>
</div>

자바 스크립트

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
                }
            }]
        }
    }
});

답변:


71

var ctx = $('#myChart');요소 목록을 반환하는 것 같습니다 . 를 사용하여 첫 번째를 참조해야합니다 ctx[0]. 또한 높이는 함수가 아니라 속성입니다.

내 코드 에서이 방법으로 수행했습니다.

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

5
@MattSaunders 픽셀 단위입니다.
Jonathan Lam

334

옵션에서 가로 세로 비율 유지를 비활성화하면 사용 가능한 높이가 사용됩니다.

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

예아! 잘 작동합니다. 이 팁에 감사드립니다. 안부.
Sedat Kumcu

14
와이는 대답이 맞지 않습니까? 완벽하게 작동
Tom Doodler

3
흥미롭게도 destroy()차트를 동일한 캔버스에서 두 번째로 다시 작성하면 파괴 후 캔버스 높이가 엉망이 될 수 있으며 작성 전에 다시 적용해야합니다. 그러나 update옵션을 변경하지 않으면 파괴를 피하고 대신 메소드를 사용할 수 있습니다.
Gherman

5
사용 가능한 높이를 사용하고 최소 높이를 설정하려면 어떻게합니까?
Zapnologica

1
이 속성을 사용하지 않도록 설정하면 무엇을하는지 약간 설명하는 것이 좋습니다 (이미 논의 된 내용 제외).
fgblomqvist

115

가장 쉬운 방법은 캔버스의 컨테이너를 만들고 높이를 설정하는 것입니다.

<div style="height: 300px">
  <canvas id="chart"></canvas>
</div>

그리고 설정

options: {  
    responsive: true,
    maintainAspectRatio: false
}

21
감사합니다. 여기서 핵심 은 그래프 옵션에서 설정 maintainAspectRatio하는 것 false입니다. 그렇지 않으면 속성을 height통해 할당 된 style속성이 실제로 적용되지 않습니다.
Ben

2
벤의 제안은 금이다.
rubeonline

responsive옵션 의 기본값 은 true입니다. 세부 사항 : chartjs.org/docs/latest/general/…
Dem Pilafian

height캔버스 위에있는 것이 아니라 부모 요소에 있어야 한다는 점을 분명히 해주셔서 감사 합니다
Savage

16

캔버스 요소를 부모 div로 감싸서 상대적으로 배치 한 다음 해당 div에 원하는 높이를 지정하고 옵션에서 MaintainAspectRatio : false를 설정하십시오

//HTML
<div id="canvasWrapper" style="position: relative; height: 80vh/500px/whatever">
<canvas id="chart"></canvas>
</div>

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

/*, your other options*/

}
});
</script>

Chart.js 웹 사이트의 문서를 기반으로 올바른 접근 방식으로 보입니다.
Ryan D

14

이것은 나를 위해 일했다 :

나는 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"]

그런 다음 가로 세로 비율을 유지하지 못했습니다.

options: {
  responsive: true,
  maintainAspectRatio: false,

6

그가 맞아. jQuery를 유지하려면이 작업을 수행 할 수 있습니다

var ctx = $('#myChart')[0];
ctx.height = 500;

또는

var ctx = $('#myChart');
ctx.attr('height',500);

그 달러 기호는 무엇입니까?
Tiberiu-Ionuț Stan

1
$ 기호는 선택과 jQuery를의 별칭입니다
안드레이 Erdoss

4

차트의 aspectRatio 속성을 0으로 설정하면 나에게 속임수가 있습니다 ...

    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
                    }
                }]
            }
        }
    });
myChart.aspectRatio = 0;

4

canvas 요소에 html height 속성을 다음과 같이 사용해야합니다.

<div class="chart">
    <canvas id="myChart" height="100"></canvas>
</div>

2

컨테이너를 만들고 차트 수 또는 차트 특정 크기에 따라 원하는 뷰 포트 높이를 설정했습니다.

.graph-container {
width: 100%;
height: 30vh;
}

화면 크기에 동적이되도록 컨테이너를 다음과 같이 설정했습니다.

*Small media devices specific styles*/
@media screen and (max-width: 800px) {
.graph-container {
        display: block;
        float: none;
        width: 100%;
        margin-top: 0px;
        margin-right:0px;
        margin-left:0px;
        height: auto;
    }
}

물론 여러 번 언급 된 것처럼 매우 중요한 것은 option차트 의 다음 속성을 설정하는 것 입니다.

options:{
    maintainAspectRatio: false,
    responsive: true,
}

2

캔버스에 치수를 설정할 수도 있습니다

<canvas id="myChart" width="400" height="400"></canvas>

그런 다음 반응 형 옵션을 false 로 설정하여 항상 지정된 크기로 차트를 유지하십시오.

options: {
    responsive: false,
}

1

높이를 수동으로 설정하지 않고 부모 요소를 100 % 채우려면 차트가 필요했으며, 문제는 부모 div가 항상 나머지 공간을 채우도록 강제하는 것이 었습니다.

반응 형 및 비율 옵션을 설정 한 후 (관련 chartjs doc 확인 ) 다음 CSS는 트릭을 수행했습니다.

html

<div class="panel">
  <div class="chart-container">
    <canvas id="chart"></canvas>
  </div>
</div>

scss :

.panel {
  display: flex;

  .chart-container {
    position: relative;
    flex-grow: 1;
    min-height: 0;
  }
}

0

@numediaweb 의 답변에 추가하기 만하면됩니다.

설정 지침을 따르고 나서 벽에 머리를 대고있는 경우 maintainAspectRatio=false: 나는 원래 Angular 2 +와 함께 Chart.js를 사용하는 웹 사이트의 예제에서 코드를 복사했습니다.

        <div style="display: block">
          <canvas baseChart
                  [datasets]="chartData"
                  [labels]="chartLabels"
                  [options]="chartOptions"
                  [legend]="chartLegend"
                  [colors]="chartColors"
                  [chartType]="chartType">
          </canvas>
        </div>

이 작업을 올바르게 수행하려면 포함 된 (및 불필요한) 제거해야합니다. style="display: block" 대신 둘러싸는 div의 클래스를 정의하고 CSS에서 높이를 정의하십시오.

그렇게하면 차트의 너비는 반응하지만 높이는 고정되어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.