angular – 尝试在ng2图表中设置图表的大小

前端之家收集整理的这篇文章主要介绍了angular – 尝试在ng2图表中设置图表的大小前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试设置图表的大小.

我已将条形图的ng2-chart示例复制并粘贴到我的打字稿文件中.

如果我玩画布:

  1. <canvas baseChart width="100" height="100">

尺寸似乎没有发生.它总是拉伸到MAX.

如果我添加一些样式:

  1. canvas {
  2. width: 50px;
  3. height: 50px;
  4. }

它也被拉伸到MAX.

似乎图表正在某种iFrame中显示,这让我更加困惑.

有关如何设置图表大小的任何帮助?

我的代码

  1. import {Component,OnInit} from '@angular/core';
  2. @Component({
  3. selector: 'bar-chart-component',template: `
  4. <div class="row">
  5. <div class="col-md-6">
  6. <div style="display: block;">
  7. <canvas baseChart width="100" height="100"
  8. [datasets]="lineChartData"
  9. [labels]="lineChartLabels"
  10. [options]="lineChartOptions"
  11. [colors]="lineChartColors"
  12. [legend]="lineChartLegend"
  13. [chartType]="lineChartType"
  14. (chartHover)="chartHovered($event)"
  15. (chartClick)="chartClicked($event)"></canvas>
  16. </div>
  17. </div>
  18. <div class="col-md-6" style="margin-bottom: 10px">
  19. <table class="table table-responsive table-condensed">
  20. <tr>
  21. <th *ngFor="let label of lineChartLabels">{{label}}</th>
  22. </tr>
  23. <tr *ngFor="let d of lineChartData">
  24. <td *ngFor="let label of lineChartLabels; let j=index">{{d && d.data[j]}}</td>
  25. </tr>
  26. </table>
  27. <button (click)="randomize()">CLICK</button>
  28. </div>
  29. </div>
  30. `,styles: [`
  31. canvas {
  32. width: 50px;
  33. height: 50px;
  34. }
  35. `]
  36. })
  37. export class BarChartComponent implements OnInit {
  38.  
  39. ngOnInit(): void {
  40. }
  41.  
  42. // lineChart
  43. public lineChartData: Array<any> = [
  44. {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'}
  45. ];
  46. public lineChartLabels: Array<any> = ['January','February','March','April','May','June','July'];
  47. public lineChartOptions: any = {
  48. responsive: true
  49. };
  50. public lineChartColors: Array<any> = [
  51. { // grey
  52. backgroundColor: 'rgba(148,159,177,0.2)',borderColor: 'rgba(148,1)',pointBackgroundColor: 'rgba(148,pointBorderColor: '#fff',pointHoverBackgroundColor: '#fff',pointHoverBorderColor: 'rgba(148,0.8)'
  53. },{ // dark grey
  54. backgroundColor: 'rgba(77,83,96,borderColor: 'rgba(77,pointBackgroundColor: 'rgba(77,pointHoverBorderColor: 'rgba(77,1)'
  55. },{ // grey
  56. backgroundColor: 'rgba(148,0.8)'
  57. }
  58. ];
  59. public lineChartLegend: boolean = true;
  60. public lineChartType: string = 'line';
  61.  
  62. public randomize(): void {
  63. let _lineChartData: Array<any> = new Array(this.lineChartData.length);
  64. for (let i = 0; i < this.lineChartData.length; i++) {
  65. _lineChartData[i] = {
  66. data: new Array(this.lineChartData[i].data.length),label: this.lineChartData[i].label
  67. };
  68. for (let j = 0; j < this.lineChartData[i].data.length; j++) {
  69. _lineChartData[i].data[j] = Math.floor((Math.random() * 100) + 1);
  70. }
  71. }
  72. this.lineChartData = _lineChartData;
  73. }
  74.  
  75. // events
  76. public chartClicked(e: any): void {
  77. console.log(e);
  78. }
  79.  
  80. public chartHovered(e: any): void {
  81. console.log(e);
  82. }
  83. }
通过在选项中设置responsive:true和maintainAspectRatio:false,它允许使用CSS调整画布大小,并且不会扭曲或拉伸图表中的文本.
  1. public lineChartOptions: any = {
  2. responsive: true,maintainAspectRatio: false
  3. };

如果您通过javascript更改css,则需要强制重绘图表.

有两种方法可以做到这一点:

  1. this.lineChartData = this.lineChartData.slice();

要么

  1. import { Chart } from "chart.js";
  2. ...
  3. var ctx = this.chart.ctx;
  4. var chart = this.chart;
  5. var myChart = new Chart(ctx,chart);
  6. myChart.resize();

您可以忽略创建的iframe对象.它不占用任何可见空间.

猜你在找的Angularjs相关文章