我正在尝试使用chartJS-2来显示带有一系列用户活动的图形,但是显示不正确:
import { Component, OnInit, Input } from '@angular/core';
import { ChartOptions, ChartType, ChartDataSets } from 'chart.js';
import * as pluginDataLabels from 'chartjs-plugin-datalabels';
import { Label } from 'ng2-charts';
import { IblinkPoint } from 'src/app/iblink-point';
import { OpenWebService } from 'src/app/blinking/open-web.service';
@Component({
selector: 'app-graph',
templateUrl: './graph.component.html',
styleUrls: ['./graph.component.scss']
})
export class GraphComponent implements OnInit {
public barChartOptions: ChartOptions = {
responsive: true,
// We use these empty structures as placeholders for dynamic theming.
scales: { xAxes: [{}], yAxes: [{}] },
plugins: {
datalabels: {
anchor: 'end',
align: 'end',
}
}
};
public barChartType: ChartType = 'bar';
public chartColors: Array<any> = [
{
backgroundColor: 'rgb(77, 0, 77, 1)',
borderColor: 'rgba(77, 0, 77, 1)',
borderWidth: 2,
}
];
public barChartData: ChartDataSets[];
public barChartLabels: Label[];
@Input() blinks: IblinkPoint[];
constructor(private openWebService: OpenWebService) { }
ngOnInit() {
let arrBlinks = this.openWebService.getBlinkData();
let startDateArry: any[] = [];
let endDateArry: any[] = [];
let blinkArry: any[] = [];
arrBlinks.forEach(element => {
blinkArry.push(element.blinkCounter).toString;
startDateArry.push(element.startDate.getMinutes().toString());
// console.log(startDateArry);
// endDateArry.push(element.endDate.getHours());
});
this.barChartLabels = [startDateArry];
this.barChartData = [{ data: blinkArry, label: 'blinks'}];
// console.log(this.barChartData);
// console.log(this.barChartLabels);
}
}
<div style="display: block">
<canvas baseChart
[datasets]="barChartData"
[labels]="barChartLabels"
[chartType]="barChartType"
[colors]="chartColors">
</canvas>
</div>
我希望看到一个图形,但是相反,它将所有barChartLables展示在一个地方,彼此堆叠,仅显示一个barChartData。 我尝试调试我的代码,但是找不到任何问题。
答案 0 :(得分:0)
问题是由此声明引起的
this.barChartLabels = [startDateArry];
这是当您将数组startDateArry
作为数组this.barChartLabels
的第一项插入时;相反,您应该这样做:
this.barChartLabels = startDateArry;
相关的 HTML :
<div style="display: block;">
<canvas baseChart
[datasets]="barChartData"
[labels]="barChartLabels"
[options]="barChartOptions"
[plugins]="barChartPlugins"
[legend]="barChartLegend"
[chartType]="barChartType">
</canvas>
</div>
相关的 TS :
import { Component, OnInit } from '@angular/core';
import { ChartOptions, ChartType, ChartDataSets } from 'chart.js';
import { Label } from 'ng2-charts';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
public barChartOptions: ChartOptions = {
responsive: true,
// We use these empty structures as placeholders for dynamic theming.
scales: { xAxes: [{}], yAxes: [{}] },
plugins: {
datalabels: {
anchor: 'end',
align: 'end',
}
}
};
public barChartLabels: Label[];
public barChartType: ChartType = 'bar';
public barChartLegend = true;
public barChartPlugins = [];
public barChartData: ChartDataSets[];
constructor() {
}
ngOnInit() {
let startDateArry: any[] = [];
let blinkArry: any[] = [];
for (var i = 0; i < 7; i++) {
blinkArry.push(Math.round(Math.random() * 100));
startDateArry.push(Math.round(Math.random() * 100));
}
this.barChartData = [{ data: blinkArry, label: 'blinks' }];
this.barChartLabels = [startDateArry];
console.log('this is the issue!', this.barChartLabels);
/* SOLUTION */
this.barChartLabels = startDateArry;
console.log('this is the fix!!!', this.barChartLabels);
}
}
您还可以在attached working stackblitz中看到这两个语句之间的区别