我正在尝试设置图表的大小.
我已将条形图的ng2-chart示例复制并粘贴到我的打字稿文件中.
如果我玩画布:
<canvas baseChart width="100" height="100">
尺寸似乎没有发生.它总是拉伸到MAX.
如果我添加一些样式:
canvas { width: 50px; height: 50px; }
它也被拉伸到MAX.
似乎图表正在某种iFrame中显示,这让我更加困惑.
有关如何设置图表大小的任何帮助?
我的代码:
import {Component,OnInit} from '@angular/core'; @Component({ selector: 'bar-chart-component',template: ` <div class="row"> <div class="col-md-6"> <div style="display: block;"> <canvas baseChart width="100" height="100" [datasets]="lineChartData" [labels]="lineChartLabels" [options]="lineChartOptions" [colors]="lineChartColors" [legend]="lineChartLegend" [chartType]="lineChartType" (chartHover)="chartHovered($event)" (chartClick)="chartClicked($event)"></canvas> </div> </div> <div class="col-md-6" style="margin-bottom: 10px"> <table class="table table-responsive table-condensed"> <tr> <th *ngFor="let label of lineChartLabels">{{label}}</th> </tr> <tr *ngFor="let d of lineChartData"> <td *ngFor="let label of lineChartLabels; let j=index">{{d && d.data[j]}}</td> </tr> </table> <button (click)="randomize()">CLICK</button> </div> </div> `,styles: [` canvas { width: 50px; height: 50px; } `] }) export class BarChartComponent implements OnInit { ngOnInit(): void { } // lineChart public lineChartData: Array<any> = [ {data: [65,59,80,81,56,55,40],label: 'Series A'},{data: [28,48,40,19,86,27,90],label: 'Series B'},{data: [18,77,9,100,label: 'Series C'} ]; public lineChartLabels: Array<any> = ['January','February','March','April','May','June','July']; public lineChartOptions: any = { responsive: true }; public lineChartColors: Array<any> = [ { // grey backgroundColor: 'rgba(148,159,177,0.2)',borderColor: 'rgba(148,1)',pointBackgroundColor: 'rgba(148,pointBorderColor: '#fff',pointHoverBackgroundColor: '#fff',pointHoverBorderColor: 'rgba(148,0.8)' },{ // dark grey backgroundColor: 'rgba(77,83,96,borderColor: 'rgba(77,pointBackgroundColor: 'rgba(77,pointHoverBorderColor: 'rgba(77,1)' },{ // grey backgroundColor: 'rgba(148,0.8)' } ]; public lineChartLegend: boolean = true; public lineChartType: string = 'line'; public randomize(): void { let _lineChartData: Array<any> = new Array(this.lineChartData.length); for (let i = 0; i < this.lineChartData.length; i++) { _lineChartData[i] = { data: new Array(this.lineChartData[i].data.length),label: this.lineChartData[i].label }; for (let j = 0; j < this.lineChartData[i].data.length; j++) { _lineChartData[i].data[j] = Math.floor((Math.random() * 100) + 1); } } this.lineChartData = _lineChartData; } // events public chartClicked(e: any): void { console.log(e); } public chartHovered(e: any): void { console.log(e); } }
通过在选项中设置responsive:true和maintainAspectRatio:false,它允许使用CSS调整画布大小,并且不会扭曲或拉伸图表中的文本.
public lineChartOptions: any = { responsive: true,maintainAspectRatio: false };
如果您通过javascript更改css,则需要强制重绘图表.
有两种方法可以做到这一点:
this.lineChartData = this.lineChartData.slice();
要么
import { Chart } from "chart.js"; ... var ctx = this.chart.ctx; var chart = this.chart; var myChart = new Chart(ctx,chart); myChart.resize();
您可以忽略创建的iframe对象.它不占用任何可见空间.