使用 Ng2 图表在堆叠条形图中显示标签
Show labels in stacked bar chart with Ng2Charts
我有一个带有堆叠条形图的 Anuglar6 项目,实际上是使用 Ng2Charts 构建的。
是否可以显示一个堆栈的每个部分中的值?
如果没有,有没有人知道使这成为可能的 angular2 模块?
index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script data-require="chart.js@2.6.0" src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.1/Chart.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels"></script>
</head>
<body>
<app-root>
<div class="spinner">
<div class="bounce1"></div>
<div class="bounce2"></div>
<div class="bounce3"></div>
</div>
</app-root>
</body>
图表选项 *.component.ts
public barChartOptions: any = {
scaleShowVerticalLines: true,
responsive: true,
plugins: {
datalabels: {
display: true,
align: 'center',
anchor: 'center'
}
},
scales: {
xAxes: [{
stacked: true,
stackLabels: {
enabled: true
}
}],
yAxes: [{
stacked: true,
ticks: {
beginAtZero: true
}
}]
}
};
public barChartType = 'bar';
public barChartLegend = true;
*.component.html
<div class="row">
<div class="col col-sm-12">
<div class="card mb-12">
<div class="card-header">
<span>
{{ 'Production' | translate }} <small>{{ '(in pcs.)' | translate }}</small>
<small class="summary"><i>{{ 'Summary' | translate}} <b>{{ summary }}</b></i></small>
</span>
</div>
<div lang class="card-body">
<canvas baseChart [datasets]="barChartData" [labels]="dayLabels" [options]="barChartOptions" [legend]="barChartLegend" [chartType]="barChartType" (chartHover)="chartHovered($event)" (chartClick)="chartClicked($event)">
</canvas>
</div>
</div>
</div>
由于 ng2-charts 内部使用 chart.js,这可以使用名为 Chart.js 的插件轻松实现:chartjs-plugin-datalabels.
以下是此插件需要设置的最少选项,以显示堆叠条形图内部(中间)的值:
options: { //your chart options
plugins: {
datalabels: {
display: true,
align: 'center',
anchor: 'center'
}
}
}
尽管如此,您还可以使用大量其他选项来进一步自定义这些 values/labels(内部条),这些选项可以在 here
.
中找到
你可以试试这个:
animation: {
onComplete: function () {
const chartInstance = this.chart,
ctx = chartInstance.ctx;
const fontSize = 20;
const fontStyle = '600';
const fontFamily = 'Open Sans';
// ctx.font = Chart.helpers.fontString(fontSize, fontStyle, fontFamily);
ctx.textAlign = 'center';
ctx.textBaseline = 'bottom';
// ctx.fillStyle = '#676A6C';
this.data.datasets.forEach(function (dataset, i) {
const meta = chartInstance.controller.getDatasetMeta(i);
meta.data.forEach(function (bar, index) {
if (dataset.data[index] !== 0) {
const data = dataset.data[index].toLocaleString('it-IT', { maximumFractionDigits: 0 });
ctx.fillText(data, bar._model.x, bar._model.y - 0);
}
});
});
}
}
我有一个带有堆叠条形图的 Anuglar6 项目,实际上是使用 Ng2Charts 构建的。 是否可以显示一个堆栈的每个部分中的值?
如果没有,有没有人知道使这成为可能的 angular2 模块?
index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script data-require="chart.js@2.6.0" src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.1/Chart.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels"></script>
</head>
<body>
<app-root>
<div class="spinner">
<div class="bounce1"></div>
<div class="bounce2"></div>
<div class="bounce3"></div>
</div>
</app-root>
</body>
图表选项 *.component.ts
public barChartOptions: any = {
scaleShowVerticalLines: true,
responsive: true,
plugins: {
datalabels: {
display: true,
align: 'center',
anchor: 'center'
}
},
scales: {
xAxes: [{
stacked: true,
stackLabels: {
enabled: true
}
}],
yAxes: [{
stacked: true,
ticks: {
beginAtZero: true
}
}]
}
};
public barChartType = 'bar';
public barChartLegend = true;
*.component.html
<div class="row">
<div class="col col-sm-12">
<div class="card mb-12">
<div class="card-header">
<span>
{{ 'Production' | translate }} <small>{{ '(in pcs.)' | translate }}</small>
<small class="summary"><i>{{ 'Summary' | translate}} <b>{{ summary }}</b></i></small>
</span>
</div>
<div lang class="card-body">
<canvas baseChart [datasets]="barChartData" [labels]="dayLabels" [options]="barChartOptions" [legend]="barChartLegend" [chartType]="barChartType" (chartHover)="chartHovered($event)" (chartClick)="chartClicked($event)">
</canvas>
</div>
</div>
</div>
由于 ng2-charts 内部使用 chart.js,这可以使用名为 Chart.js 的插件轻松实现:chartjs-plugin-datalabels.
以下是此插件需要设置的最少选项,以显示堆叠条形图内部(中间)的值:
options: { //your chart options
plugins: {
datalabels: {
display: true,
align: 'center',
anchor: 'center'
}
}
}
尽管如此,您还可以使用大量其他选项来进一步自定义这些 values/labels(内部条),这些选项可以在 here
.
你可以试试这个:
animation: {
onComplete: function () {
const chartInstance = this.chart,
ctx = chartInstance.ctx;
const fontSize = 20;
const fontStyle = '600';
const fontFamily = 'Open Sans';
// ctx.font = Chart.helpers.fontString(fontSize, fontStyle, fontFamily);
ctx.textAlign = 'center';
ctx.textBaseline = 'bottom';
// ctx.fillStyle = '#676A6C';
this.data.datasets.forEach(function (dataset, i) {
const meta = chartInstance.controller.getDatasetMeta(i);
meta.data.forEach(function (bar, index) {
if (dataset.data[index] !== 0) {
const data = dataset.data[index].toLocaleString('it-IT', { maximumFractionDigits: 0 });
ctx.fillText(data, bar._model.x, bar._model.y - 0);
}
});
});
}
}