2017-03-16 26 views
7

Grafiklerimin boyutunu ayarlamaya çalışıyorum.ng2 listelerinde grafiklerin boyutlarını ayarlamaya çalışıyorum

Çubuk grafiğin ng2 grafik örneğini kopyalayıp benim typescript dosyasına yapıştırdım.

Ben tuval uğraşmak durumunda:

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

Hiçbir şey büyüklük ile ne gibi görünüyor. Her zaman MAX'a zorlanır.

canvas { 
     width: 50px; 
     height: 50px; 
    } 

Ayrıca MAX şekilde uzatılır:

Bazı stylings ekleyin.

Grafiğin bir çeşit iFrame'de görüntülendiği görülüyor ki bu da beni daha fazla kafa karıştırıyor.

Grafiğimin boyutunu nasıl ayarlayacağınız konusunda yardım ister misiniz?

Kodum:

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, 48, 77, 9, 100, 27, 40], 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,159,177,1)', 
      pointBackgroundColor: 'rgba(148,159,177,1)', 
      pointBorderColor: '#fff', 
      pointHoverBackgroundColor: '#fff', 
      pointHoverBorderColor: 'rgba(148,159,177,0.8)' 
     }, 
     { // dark grey 
      backgroundColor: 'rgba(77,83,96,0.2)', 
      borderColor: 'rgba(77,83,96,1)', 
      pointBackgroundColor: 'rgba(77,83,96,1)', 
      pointBorderColor: '#fff', 
      pointHoverBackgroundColor: '#fff', 
      pointHoverBorderColor: 'rgba(77,83,96,1)' 
     }, 
     { // grey 
      backgroundColor: 'rgba(148,159,177,0.2)', 
      borderColor: 'rgba(148,159,177,1)', 
      pointBackgroundColor: 'rgba(148,159,177,1)', 
      pointBorderColor: '#fff', 
      pointHoverBackgroundColor: '#fff', 
      pointHoverBorderColor: 'rgba(148,159,177,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); 
    } 
} 
+1

Ayrıca bu sorunu yaşıyorum. Tuval boyutunu CSS olarak ayarlamak çok büyük bir şey değil, ancak tuvali küçültdüğümde yazı tipleri çok küçük. – paqogomez

+0

Sorununuzu yanlış anladıysam bildirin. Bu benimkini düzeltir, ancak bir keman veya plunker olmadan anladığımdan emin olamam. – paqogomez

+0

Bu nedenle, grafiği yeniden boyutlandırmak veya farklı boyuttaki ekranlar için duyarlı hale getirmek mi istiyorsunuz? Bu, kaydırma ile ilgili sorun mu? –

cevap

5

seçeneklerinde responsive: true ve maintainAspectRatio: false ayarlayarak, o CSS ile tuval yeniden boyutlandırma izin verir ve tahrif veya grafikte metni esnemez.

public lineChartOptions: any = { 
    responsive: true, 
    maintainAspectRatio: false 
}; 

Eğer javascript aracılığıyla css değiştirirseniz

, sen yeniden boyamak için grafiği zorlamak gerekir.

Bunu yapmanın yollarından bir çift:

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

Ya

import { Chart } from "chart.js"; 
... 
var ctx = this.chart.ctx; 
var chart = this.chart; 
var myChart = new Chart(ctx, chart); 
myChart.resize(); 

Sen oluşturulan iframe nesnesini göz ardı edebilirsiniz. Görünür alan almaz.

İlgili konular