Cách đặt giá trị tối đa và tối thiểu cho trục Y


176

Tôi đang sử dụng biểu đồ đường từ http://www.chartjs.org/ nhập mô tả hình ảnh ở đây

Như bạn có thể thấy giá trị tối đa (130) và giá trị tối thiểu (60) cho trục Y được chọn tự động, tôi muốn giá trị tối đa = 500 và giá trị tối thiểu = 0. Điều này có thể không?

Câu trả lời:


68

Bạn phải ghi đè lên thang đo, hãy thử điều này:

window.onload = function(){
    var ctx = document.getElementById("canvas").getContext("2d");
    window.myLine = new Chart(ctx).Line(lineChartData, {
        scaleOverride : true,
        scaleSteps : 10,
        scaleStepWidth : 50,
        scaleStartValue : 0 
    });
}

48
Lưu ý câu trả lời này có liên quan đến các phiên bản 1.x của chart.js Đối scalestượng trong các phiên bản 2.x khá khác nhau. Xem câu trả lời @OferSegev bên dưới và tài liệu 2.x tại đây .
Boaz

1
Có tài liệu nào cho v1.x không @Boaz
Black Mamba

1
@IshanMahajan Đã từng như vậy :) Tôi dường như không thể tìm thấy nó nữa. Tôi nghĩ rằng đây là một tấm gương tốt: web-beta.archive.org/web/20150816192112/http:// móc
Boaz

264

Đối với chart.js V2 (beta), hãy sử dụng:

var options = {
    scales: {
        yAxes: [{
            display: true,
            ticks: {
                suggestedMin: 0,    // minimum will be 0, unless there is a lower value.
                // OR //
                beginAtZero: true   // minimum value will be 0.
            }
        }]
    }
};

Xem tài liệu chart.js về cấu hình trục tuyến tính để biết thêm chi tiết.


33
xem thêm min, maxstepsizethuộc tính của tickskhông gian tên
Ralph Callaway

17
suggestedMaxcho giá trị hàng đầu tối thiểu
Finesse

60

var config = {
            type: 'line',
            data: {
                labels: ["January", "February", "March", "April", "May", "June", "July"],
                datasets: [{
                        label: "My First dataset",
                        data: [10, 80, 56, 60, 6, 45, 15],
                        fill: false,
                        backgroundColor: "#eebcde ",
                        borderColor: "#eebcde",
                        borderCapStyle: 'butt',
                        borderDash: [5, 5],
                    }]
            },
            options: {
                responsive: true,
                legend: {
                    position: 'bottom',
                },
                hover: {
                    mode: 'label'
                },
                scales: {
                    xAxes: [{
                            display: true,
                            scaleLabel: {
                                display: true,
                                labelString: 'Month'
                            }
                        }],
                    yAxes: [{
                            display: true,
                            ticks: {
                                beginAtZero: true,
                                steps: 10,
                                stepValue: 5,
                                max: 100
                            }
                        }]
                },
                title: {
                    display: true,
                    text: 'Chart.js Line Chart - Legend'
                }
            }
        };

        var ctx = document.getElementById("canvas").getContext("2d");
       new Chart(ctx, config);
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.2.1/Chart.bundle.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
  <canvas id="canvas"></canvas>
</body>


Hoạt động tốt trong 2.4.0
Avinash

39

Biểu đồJS v2.4.0

Như được hiển thị trong các ví dụ tại https://github.com/jtblin/angular-chart.js vào ngày 7 tháng 7 năm 2017 (vì điều này dường như có thể thay đổi thường xuyên):

var options = {
    yAxes: [{
        ticks: {
            min: 0,
            max: 100,
            stepSize: 20
        }
    }]
}

Điều này sẽ dẫn đến 5 giá trị trục y như sau:

100
80
60
40
20
0

Tôi ngạc nhiên khi nó hoạt động bởi vì tôi nghĩ rằng xAxesyAxesđược cho là được lồng scalestrong các tùy chọn. Điều đó cộng với điều này mới hơn câu trả lời của Ofer Sergev có vẻ đúng cũng đáng ngạc nhiên.
claudekennilol

1
Biểu đồ của tôi có một số phương trình với rất nhiều tiếng ồn. Có cách nào để cập nhật giá trị tối đa trong thời gian thực dựa trên giá trị lớn nhất của một trong các phương trình không? Ví dụ: giá trị tối đa + 100.
Martin Erlic

25

Viết bài này vào năm 2016 trong khi Biểu đồ js 2.3.0 là bài mới nhất. Đây là cách người ta có thể thay đổi nó

var options = {
    scales: {
        yAxes: [{
            display: true,
            stacked: true,
            ticks: {
                min: 0, // minimum value
                max: 10 // maximum value
            }
        }]
    }
};

15

Các câu trả lời trên không làm việc cho tôi. Có thể các tên tùy chọn đã được thay đổi kể từ '11, nhưng những điều sau đây đã giúp tôi:

ChartJsProvider.setOptions
  scaleBeginAtZero: true

13
window.onload = function(){
var ctx = document.getElementById("canvas").getContext("2d");
window.myLine = new Chart(ctx ,{
          type: 'line',
          data: yourData,
          options: {
            scales: {
                yAxes: [{
                    ticks: {
                        beginAtZero:true,
                        min: 0,
                        max: 500    
                    }
                  }]
               }
            }
});

Tôi cấu hình với 'tùy chọn' trong v2.

Bạn nên đọc tài liệu: http://www.chartjs.org/docs/#scales-linear-scale


Cảm ơn. Cái này hoạt động với tôi trên v2,5 của chart.js. Đơn giản và hiệu quả.
Iovy Necula

2
Các tài liệu rất bực bội ... Tôi phải tìm kiếm các ví dụ về mọi người để đoán các tùy chọn có sẵn.
Adrian P.

Nếu ai đó đang sử dụng javascript thuần túy, câu trả lời này là câu trả lời đúng. Tôi đã viết một ví dụ nhỏ bằng cách này và tôi đã đăng mã js hoàn chỉnh của mình bên dưới.
Ishara Amarasekera

9

Tôi đã viết một js để hiển thị các giá trị từ 0 đến 100 theo trục y với khoảng cách là 20.

Đây là script.js của tôi

//x-axis
var vehicles = ["Trucks", "Cars", "Bikes", "Jeeps"];

//The percentage of vehicles of each type
var percentage = [41, 76, 29, 50];

var ctx = document.getElementById("barChart");
var lineChart = new Chart(ctx, {
  type: 'bar',
  data: {
    labels: vehicles,
    datasets: [{
      data: percentage,
      label: "Percentage of vehicles",
      backgroundColor: "#3e95cd",
      fill: false
    }]
  },
  options: {
    scales: {
      yAxes: [{
        ticks: {
          beginAtZero: true,
          min: 0,
          max: 100,
          stepSize: 20,
        }
      }]
    }
  }
});

Đây là biểu đồ hiển thị trên web.

Tỷ lệ phương tiện trong thị trấn


9

> Giải pháp tốt nhất


  "options":{
                    scales: {
                                yAxes: [{
                                    display: true,
                                    ticks: {
                                        suggestedMin: 0, //min
                                        suggestedMax: 100 //max 
                                    }
                                }]
                            }
                    }

7

Chỉ cần đặt giá trị cho scaleStartValue trong các tùy chọn của bạn.

var options = {
   // ....
   scaleStartValue: 0,
}

Xem tài liệu cho việc này ở đây .


Câu trả lời này tốt hơn cho tôi vì nó giải thích cách chọn giá trị bắt đầu tỷ lệ, nếu không 0
Pechou

7
yAxes: [{
    display: true,
    ticks: {
        beginAtZero: true,
        steps:10,
        stepValue:5,
        max:100
    }
}]

1
Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về lý do tại sao và / hoặc cách nó trả lời câu hỏi sẽ cải thiện đáng kể giá trị lâu dài của nó. Vui lòng chỉnh sửa câu trả lời của bạn để thêm một số lời giải thích.
Toby Speight

7

Cái này dành cho Charts.js 2.0:

Lý do một số trong số này không hoạt động là vì bạn nên khai báo các tùy chọn của mình khi bạn tạo biểu đồ của mình như vậy:

$(function () {
    var ctxLine = document.getElementById("myLineChart");
    var myLineChart = new Chart(ctxLine, {
        type: 'line',
        data: dataLine,
        options: {
            scales: {
                yAxes: [{
                    ticks: {
                        min: 0,
                        beginAtZero: true
                    }
                }]
            }
        }

    });
})

Tài liệu cho việc này ở đây: http://www.chartjs.org/docs/#scales


Đây có phải là sự thích ứng cho những thay đổi trong ChartJS đi kèm với phiên bản 2.0 (Tôi nghĩ rằng câu hỏi và câu trả lời được chấp nhận một năm trước đã xử lý với ChartJS 1.x). Có lẽ câu trả lời này thậm chí sẽ hữu ích hơn nếu điều này được giải thích ngắn gọn. Có lẽ chỉ nhận xét về nhận xét này nếu thời gian cho phép. Cảm ơn.
Pha loãng

3

Với 1.1.1, tôi đã sử dụng cách sau để sửa tỷ lệ giữa 0,0 và 1,0:

var options = {
    scaleOverride: true,
    scaleStartValue: 0,
    scaleSteps: 10,
    scaleStepWidth: 0.1
}

1

Trong trường hợp của tôi, tôi đã sử dụng một cuộc gọi lại trong các dấu hiệu yaxis, các giá trị của tôi được tính bằng phần trăm và khi nó đạt đến 100% thì nó không hiển thị dấu chấm, tôi đã sử dụng điều này:

      yAxes: [{
                   ticks: {
                       beginAtZero: true,
                       steps: 10,
                       stepValue: 5,
                       max: 100.1,
                       callback: function(value, index, values) {
                           if (value !== 100.1) {
                               return values[index]
                           }
                       }
                   }
               }],

Và nó hoạt động tốt.


0

Vì không có gợi ý nào ở trên giúp tôi với chart.js 2.1.4, tôi đã giải quyết nó bằng cách thêm giá trị 0 vào mảng tập dữ liệu của tôi (nhưng không có nhãn phụ):

statsData.push(0);

[...]

var myChart = new Chart(ctx, {
    type: 'horizontalBar',
    data: {
        datasets: [{
            data: statsData,
[...]

0

Tôi đã sử dụng một phiên bản cũ của mẫu Flat Lab trong nhiều dự án của tôi đang sử dụng v1.x của chart.js mà tôi không chắc chắn. Tôi không thể cập nhật lên v2.x vì tôi đã có nhiều dự án làm việc với nó . Những điều đã đề cập ở trên(bardata,options) đã không làm việc cho tôi.

Vì vậy, đây là bản hack cho phiên bản 1.x

calculatedScale = calculateScale(scaleHeight,valueBounds.maxSteps,valueBounds.minSteps,valueBounds.maxValue,valueBounds.minValue,labelTemplateString);

Thay thế bằng:

calculatedScale = calculateScale(scaleHeight,valueBounds.maxSteps,1,valueBounds.maxValue,0,labelTemplateString);

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 cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.