การตั้งค่าความกว้างและความสูง


88

ฉันพยายามออกโค้ดตัวอย่างสำหรับ Chart.js ที่กำหนดไว้ในเอกสาร

ความกว้างและความสูงถูกระบุแบบอินไลน์บนองค์ประกอบผ้าใบที่ 400px / 400px

แต่เมื่อแสดงผลแผนภูมิจะเต็มความกว้างเต็มหน้าและตัดปลายด้านขวาสุดออกไป

ดูตัวอย่าง

ฉันควรควบคุมความกว้าง / ความสูงของแผนภูมิอย่างไร / ที่ไหน

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

คำตอบ:


94

คุณสามารถแทนที่ความกว้างสไตล์ผ้าใบได้! สำคัญ ...

canvas{

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

}

ด้วย

ระบุresponsive:true,คุณสมบัติภายใต้ตัวเลือก ..

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

อัปเดตภายใต้ตัวเลือกที่เพิ่ม: maintainAspectRatio: false,

ลิงค์: http://codepen.io/theConstructor/pen/KMpqvo


13
ขอบคุณคุณmaintainAspectRatio: falseทำให้แผนภูมิสามารถดูได้ แต่ยังคงตัดด้านขวาออกแม้ว่า. การกดปุ่มปัญหาเหล่านี้ด้วยรหัสตัวอย่างพื้นฐานของตัวเองทำให้ฉันสงสัยว่าแผนภูมิ js เป็นทางออกที่ดี (ด้านขวายังคงถูกตัดออก ... )
Fellow Stranger

นั่นช่วยแก้ปัญหาเรื่องขนาดกราฟได้กราฟไม่ได้ปรับขนาดให้พอดี มีวิธีกำหนดขนาดกราฟจากภายใน Chart.js หรือไม่?
Firix

7
ปรากฎว่าคุณต้องปิดการตอบสนองเพื่อให้กราฟเป็นไปตามขนาดที่กำหนด อัปยศที่ดูเหมือนจะไม่มีทางควบคุมและรักษาธรรมชาติที่ตอบสนองได้ ...
Firix

2
ขอขอบคุณ. ของคุณmaintainAspectRatioช่วยฉันได้จริงๆ
Arsman Ahmad

การใช้ "! important" ไม่ใช่วิธีที่ถูกต้องในการแก้ปัญหานี้แม้ว่าจะได้ผล โซลูชัน @Nicolas ด้านล่าง "การห่อผ้าใบใน div" เป็นวิธีที่ดีกว่าเนื่องจากเราจะสามารถควบคุมการปรับขนาดผ้าใบในแบบที่เราต้องการได้
Abhishek Boorugu

55

คุณยังสามารถล้อมรอบแผนภูมิด้วยคอนเทนเนอร์ (อ้างอิงจากเอกสารอย่างเป็นทางการ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
}

และมีตัวเลือก

responsive:true
maintainAspectRatio: false

1
นี้ได้ผล กุญแจสำคัญในที่นี้คือการใช้ div ภายนอกและตั้งค่าความกว้างและความสูงแทนองค์ประกอบ canvas
John Doherty

เพื่อให้สามารถใช้งานได้แผนภูมิคอนเทนเนอร์ควรอยู่ในตำแหน่งที่ค่อนข้างเหมาะสม
Sanju

ใช้ได้กับฉัน แต่เฉพาะ!importantในโครงการเชิงมุม
АртурГудиев

24

ในกรณีของฉันการผ่านresponsive: falseตัวเลือกต่างๆช่วยแก้ปัญหาได้ ฉันไม่แน่ใจว่าทำไมทุกคนถึงบอกให้คุณทำสิ่งที่ตรงกันข้ามโดยเฉพาะอย่างยิ่งเนื่องจาก true เป็นค่าเริ่มต้น


1
เหมือนกันที่นี่ การตั้งค่าresponsive: trueทำให้ลักษณะของแผนภูมิบิดเบี้ยวโดยสิ้นเชิง
พอล

ใช้ได้กับฉัน แต่เฉพาะ!importantในโครงการ Angular ของฉัน
АртурГудиев

4

ใช้ได้ผลกับฉันด้วย

responsive:true
maintainAspectRatio: false


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

ขอขอบคุณ



1

คุณสามารถเปลี่ยนได้aspectRatioตามความต้องการของคุณ:

options:{
     aspectRatio:4 //(width/height)
}

คุณสามารถชี้แจงวิธีการทำงานนี้ได้หรือไม่? 4ไม่ใช่อัตราส่วนภาพ ความคิดเห็นของคุณระบุ(width/height)แต่ไม่ชัดเจนว่าควรนำไปใช้อย่างไร มีวิธีการส่งผ่านเป็นชุดหรือไม่? หรือคุณหมายถึงการแบ่งความกว้างที่เสนอตามความสูงที่เสนอเช่นนั้นเช่น 3: 4 จะกลายเป็น0.75?
Jeremy Caney

0

ไม่ได้กล่าวถึงข้างต้น แต่การใช้max-widthหรือmax-heightบนองค์ประกอบผ้าใบก็เป็นไปได้เช่นกัน


0

ด้านล่างใช้ได้ผลสำหรับฉัน แต่อย่าลืมใส่สิ่งนี้ในพารามิเตอร์ "ตัวเลือก"

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


-3

ใช้ตัวนี้ก็ใช้ได้ดี

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

และอยู่ภายใต้options,

responsive:true,
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.