Đặt chiều rộng và chiều cao


84

Tôi đang thử mã ví dụ cho Chart.js được cung cấp trong tài liệu .

Chiều rộng và chiều cao được chỉ định nội tuyến trên phần tử canvas ở 400px / 400px.

Nhưng khi kết xuất biểu đồ, nó sẽ bị bung ra hết chiều rộng trang và cắt bỏ phần cuối bên phải.

Xem ví dụ

Tôi phải kiểm soát chiều rộng / chiều cao của biểu đồ bằng cách nào / ở đâu?

This is some bogus text because SO prohibits linking to Codepen otherwise.

Câu trả lời:


89

Bạn có thể ghi đè chiều rộng kiểu canvas! Quan trọng ...

canvas{

  width:1000px !important;
  height:600px !important;

}

cũng thế

chỉ định responsive:true,thuộc tính trong các tùy chọn ..

options: {
    responsive: true,
    maintainAspectRatio: false,
    scales: {
        yAxes: [{
            ticks: {
                beginAtZero:true
            }
        }]
    }
}

cập nhật theo các tùy chọn được thêm vào: maintainAspectRatio: false,

liên kết: http://codepen.io/theConstructor/pen/KMpqvo


11
Cảm ơn bạn, bạn maintainAspectRatio: falseđã làm cho biểu đồ có thể xem được. Nhưng vẫn cắt bỏ mặt phải. Việc xử lý những vấn đề kiểu này đã có bằng mã ví dụ cơ bản của riêng chúng khiến tôi tự hỏi rằng chart.js có tốt hơn không. (Phía bên phải vẫn bị cắt ...)
— Fellow Stranger

Điều đó giải quyết vấn đề về kích thước đồ thị, đồ thị không được chia tỷ lệ để vừa với nó. Có cách nào để đặt kích thước đồ thị từ bên trong Chart.js không?
— Firix

7
Hóa ra là bạn cần tắt tính năng phản hồi để làm cho biểu đồ tuân theo các kích thước được cung cấp cho nó. Xấu hổ rằng có dường như không cách để kiểm soát nó và duy trì tính chất đáp ứng ...
— Firix

2
Cảm ơn bạn. Của bạn maintainAspectRatiothực sự giúp ích cho tôi.
— Arsman Ahmad

Sử dụng "! Important" không phải là cách đúng để giải quyết vấn đề này mặc dù nó hoạt động. Giải pháp @Nicolas bên dưới "gói canvas trong div" là một cách tốt hơn vì chúng ta sẽ có quyền kiểm soát việc thay đổi kích thước canvas theo cách chúng ta muốn.
— Abhishek Boorugu

53

Bạn cũng có thể chỉ cần bao quanh biểu đồ bằng vùng chứa (theo tài liệu chính thức http://www.chartjs.org/docs/latest/general/responsive.html#important-note )

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

CSS

.chart-container {
    width: 1000px;
    height:600px
}

và với các tùy chọn

responsive:true
maintainAspectRatio: false

1
Những công việc này. Chìa khóa ở đây là sử dụng một div bên ngoài và đặt chiều rộng và chiều cao trên đó thay vì phần tử canvas.
— John Doherty

Để điều này hoạt động, hộp chứa biểu đồ phải được định vị tương đối.
— Sanju

hoạt động cho tôi nhưng chỉ với !importanttrong dự án Angular
— Артур Гудиев

21

Trong trường hợp của tôi, việc chuyển responsive: falsetheo các tùy chọn đã giải quyết được vấn đề. Tôi không chắc tại sao mọi người lại bảo bạn làm điều ngược lại, đặc biệt là vì true là mặc định.


Ở đây cũng vậy. Cài đặt responsive: trueđã làm sai lệch hoàn toàn sự xuất hiện của biểu đồ.
— Paul

hoạt động cho tôi nhưng chỉ với !importanttrong dự án Angular của tôi
— Артур Гудиев

2

Cũng làm việc cho tôi

responsive:true
maintainAspectRatio: false


<div class="row">
        <div class="col-xs-12">
            <canvas id="mycanvas" width="500" height="300"></canvas>
        </div>
    </div>

Cảm ơn bạn


2

Tôi không thể tin rằng không ai nói về việc sử dụng một phần tử cha tương đối.

Mã:

<div class="chart-container" style="position: relative; height:40vh; width:80vw">
  <canvas id="chart"></canvas>
</div>

Nguồn: Tài liệu chính thức


0

Không được đề cập ở trên nhưng sử dụng max-widthhoặc max-heighttrên phần tử canvas cũng là một khả năng.


0

Phần dưới đây phù hợp với tôi - nhưng đừng quên đặt điều này trong tham số "tùy chọn".

var myChart = new Chart(ctx, {
type: 'line',
data: data,
options: {
    maintainAspectRatio: false,
    responsive:true,
    scales: {
        yAxes: [{
            ticks: {
                beginAtZero: true
            }
        }]
    }
}
});

0

Điều này đã giúp trong trường hợp của tôi:

options: {
    responsive: true,
    scales: {
        yAxes: [{
            display: true,
            ticks: {
                min:0,
                max:100
            }
        }]
    }
}

-3

Sử dụng cái này, nó hoạt động tốt.

<canvas id="totalschart" style="height:400px;width: content-box;"></canvas>

trở xuống options,

responsive:true,
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.