Ustawianie szerokości i wysokości


85

Wypróbowuję przykładowy kod Chart.js podany w dokumentach .

Szerokość i wysokość są określane bezpośrednio w elemencie canvas jako 400px / 400px.

Ale podczas renderowania wykres jest powiększany do pełnej szerokości strony i odcina prawy koniec.

Zobacz przykład

Jak / gdzie mam kontrolować szerokość / wysokość wykresu?

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

Odpowiedzi:


89

Możesz zmienić szerokość stylu płótna! Ważne ...

canvas{

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

}

również

określić responsive:true,właściwość w opcjach ..

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

aktualizacja pod dodanymi opcjami: maintainAspectRatio: false,

link: http://codepen.io/theConstructor/pen/KMpqvo


11
Dziękuję, maintainAspectRatio: falseudostępniliście wykres. Ale nadal odcinając prawą stronę. Trafianie w tego rodzaju problemy już z ich własnym podstawowym kodem przykładowym sprawia, że ​​zastanawiam się, czy chart.js to dobry zakład. (Prawa strona wciąż jest odcięta ...)
Fellow Stranger

To rozwiązuje problem rozmiaru wykresu, wykres nie został przeskalowany, aby go dopasować. Czy istnieje sposób na ustawienie rozmiaru wykresu z poziomu Chart.js?
Firix

7
Okazuje się, że musisz wyłączyć responsywność, aby wykres był zgodny z podanymi mu rozmiarami. Szkoda, że ​​nie ma sposobu, aby to kontrolować i zachować responsywny charakter ...
Firix

2
Dziękuję Ci. Twój maintainAspectRationaprawdę pomaga mi.
Arsman Ahmad,

Używanie „! Important” nie jest właściwym sposobem rozwiązania tego problemu, mimo że działa. Rozwiązanie @Nicolas poniżej „zawijanie płótna w element div” jest lepszym sposobem, ponieważ mielibyśmy kontrolę nad zmianą rozmiaru płótna w taki sposób, w jaki chcemy.
Abhishek Boorugu

52

Możesz również po prostu otoczyć wykres kontenerem (zgodnie z oficjalnym dokumentem 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
}

i z opcjami

responsive:true
maintainAspectRatio: false

1
To działa. Kluczowe jest tutaj użycie zewnętrznego elementu div i ustawienie szerokości i wysokości zamiast elementu canvas.
John Doherty

Aby to zadziałało, kontener z wykresami powinien być względnie ustawiony.
Sanju

działa dla mnie, ale tylko !importantw projekcie Angular
Артур Гудиев

22

W moim przypadku przejście responsive: falsepod opcje rozwiązało problem. Nie jestem pewien, dlaczego wszyscy mówią ci, abyś zrobił coś przeciwnego, zwłaszcza że prawda jest domyślna.


1
To samo tutaj. Ustawienie responsive: truecałkowicie wypaczyło wygląd wykresu.
Paweł

działa dla mnie, ale tylko !importantw moim projekcie Angular
Артур Гудиев

2

U mnie też działa

responsive:true
maintainAspectRatio: false


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

Dziękuję Ci


2

Nie mogę uwierzyć, że nikt nie mówił o używaniu względnego elementu nadrzędnego.

Kod:

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

Źródła: oficjalna dokumentacja


0

Nie wspomniano powyżej, ale istnieje również możliwość zastosowania max-widthlub max-heightna płótnie.


0

Poniższe działało dla mnie - ale nie zapomnij umieścić tego w parametrze "opcje".

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

0

Pomogło to w moim przypadku:

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

-3

Użyj tego, działa dobrze.

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

i poniżej options,

responsive:true,
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.