Jak ustawić maksymalną i minimalną wartość dla osi Y.


176

Używam wykresu liniowego z http://www.chartjs.org/ wprowadź opis obrazu tutaj

Jak widać, wartość maksymalna (130) i minimalna (60) dla osi Y są wybierane automatycznie, chcę, aby wartość maksymalna = 500 i minimalna = 0. czy to możliwe?

Odpowiedzi:


68

Musisz nadpisać skalę, spróbuj tego:

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

49
Zwróć uwagę, że ta odpowiedź dotyczy wersji 1.x pliku chart.js. scalesObiekt w wersjach 2.x jest zupełnie inny. Zobacz odpowiedź @OferSegev poniżej i dokumentację 2.x tutaj .
Boaz

1
Czy jest też dokumentacja dla wersji 1.x @Boaz
Black Mamba.

1
@IshanMahajan Kiedyś było :) Nie mogę już tego znaleźć. Myślę, że to dobry serwer lustrzany: web-beta.archive.org/web/20150816192112/http://…
Boaz

264

W przypadku chart.js V2 (beta) użyj:

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

Aby uzyskać więcej informacji, zobacz dokumentację chart.js dotyczącą konfiguracji osi liniowych .


33
patrz także min, maxi stepsizeatrybuty ticksprzestrzeni nazw
Ralph Callaway

17
suggestedMaxza minimalną najwyższą wartość
Finezja

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>


Działało dobrze w 2.4.0
Avinash,

39

ChartJS v2.4.0

Jak pokazano w przykładach na https://github.com/jtblin/angular-chart.js 7 lutego 2017 r. (Ponieważ wydaje się, że często się to zmienia):

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

Spowoduje to otrzymanie 5 wartości na osi Y jako takich:

100
80
60
40
20
0

Jestem zaskoczony, że to działa, ponieważ pomyślałem, że xAxesi yAxespowinny być zagnieżdżone scalesw opcjach. To plus to nowsza odpowiedź niż odpowiedź Ofera Sergeva, która wydaje się poprawna, jest również zaskakująca.
claudekennilol

1
Mój wykres zawiera kilka równań z dużą ilością szumu. Czy istnieje sposób na zaktualizowanie maksymalnej wartości w czasie rzeczywistym na podstawie największej wartości jednego z równań? Na przykład maksymalna wartość + 100.
Martin Erlic

26

Piszę to w 2016 roku, podczas gdy Chart js 2.3.0 jest najnowszym. Oto, jak można to zmienić

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

15

Powyższe odpowiedzi mi nie pomogły. Możliwe, że nazwy opcji zostały zmienione od '11 roku, ale następujące rzeczy załatwiły sprawę:

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

Konfiguruję z 'opcjami' w v2.

Powinieneś przeczytać dokumentację: http://www.chartjs.org/docs/#scales-linear-scale


Dzięki. Ten działał dla mnie w wersji 2.5 z chart.js. Proste i skuteczne.
Ionut Necula

2
Dokumenty są tak frustrujące ... Muszę przeszukiwać przykłady ludzi, aby odgadnąć dostępne opcje.
Adrian P.

Jeśli ktoś używa czystego javascript, ta odpowiedź jest poprawna. Napisałem mały przykład używając tego i zamieściłem poniżej mój pełny kod js.
Ishara Amarasekera

9

Napisałem js, aby wyświetlać wartości od 0 do 100 na osi y z przerwą 20.

To jest mój skrypt.js

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

To jest wykres wyświetlany w sieci.

Odsetek pojazdów w mieście


9

> Najlepsze rozwiązanie


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

7

Po prostu ustaw wartość scaleStartValue w opcjach.

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

Zobacz dokumentację na ten temat tutaj .


Ta odpowiedź jest dla mnie lepsza, ponieważ wyjaśnia, jak wybrać wartość początkową skali, jeśli nie 0
Pechou

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

1
Chociaż ten kod może odpowiedzieć na pytanie, dostarczenie dodatkowego kontekstu dotyczącego tego, dlaczego i / lub jak odpowiada na pytanie, znacznie poprawiłoby jego długoterminową wartość. Proszę edytować swoje odpowiedzi, aby dodać trochę wyjaśnień.
Toby Speight

7

To dotyczy Charts.js 2.0:

Powodem, dla którego niektóre z nich nie działają, jest to, że powinieneś zadeklarować swoje opcje podczas tworzenia wykresu w następujący sposób:

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

    });
})

Dokumentacja na ten temat jest dostępna tutaj: http://www.chartjs.org/docs/#scales


Czy to dostosowuje się do zmian w ChartJS, które pojawiły się w wersji 2.0 (myślę, że pytanie i zaakceptowana odpowiedź rok temu dotyczyły ChartJS 1.x). Może ta odpowiedź byłaby jeszcze bardziej pomocna, gdyby zostało to krótko wyjaśnione. Może po prostu skomentuj ten komentarz, jeśli pozwoli na to czas. Dzięki.
Dilettant

3

W wersji 1.1.1 użyłem następującego rozwiązania, aby ustalić skalę między 0,0 a 1,0:

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

1

W moim przypadku użyłem callback w tikach yaxis, moje wartości są w procentach i gdy osiągnie 100% nie pokazuje kropki, użyłem tego:

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

I działało dobrze.


0

Ponieważ żadna z powyższych sugestii nie pomogła mi w charts.js 2.1.4, rozwiązałem to, dodając wartość 0 do mojej tablicy zestawu danych (ale bez dodatkowej etykiety):

statsData.push(0);

[...]

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

0

Używałem starej wersji szablonu Flat Lab w wielu moich projektach, które korzystały z wersji 1.x z chart.js, czego nie jestem pewien Nie mogłem zaktualizować do wersji 2.x, ponieważ pracowałem już z wieloma projektami . Powyższe (bardata,options)nie działa dla mnie.

Oto hack do wersji 1.x

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

Zastąp go:

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.