- Chart.js 2.6.0*
我需要呈现一个如下所示的图表:
始终显示所有工具提示不是一种可接受的方式,因为它们不会以正确的方式进行渲染:
不幸的是,我还没有找到一个解决方案。我试过 piece-label 插件,但这也有同样的问题,因为它的标签重叠,我不能隐藏某些标签。
下面是创建图表的代码,使用 piece-label 将标签放置在切片上方:
private createStatusChart(): void {
const chartData = this.getStatusChartData();
if (!chartData) {
return;
}
const $container = $(Templates.Dashboard.ChartContainer({
ContainerID: 'chart-status',
HeaderText: 'Status'
}));
this._$content.append($container);
const legendOptions =
new Model.Charts.LegendOptions()
.SetDisplay(false);
const pieceLabelOptions =
new Model.Charts.PieceLabelOptions()
.SetRender('label')
.SetPosition('outside')
.SetArc(true)
.SetOverlap(true);
const options =
new Model.Charts.Options()
.SetLegend(legendOptions)
.SetPieceLabel(pieceLabelOptions);
const chartDefinition = new Model.Charts.Pie(chartData, options);
const ctx = this._$content.find('#chart-status canvas').get(0);
const chart = new Chart(ctx, chartDefinition);
}
private getStatusChartData(): Model.Charts.PieChartData {
if (!this._data) {
return;
}
const instance = this;
const data: Array<number> = [];
const labels: Array<string> = [];
const colors: Array<string> = [];
this._data.StatusGroupings.forEach(sg => {
if (!sg.StatusOID) {
data.push(sg.Count);
labels.push(i18next.t('Dashboard.NoStateSet'));
colors.push('#4572A7');
return;
}
const status = DAL.Properties.GetByOID(sg.StatusOID);
data.push(sg.Count);
labels.push(status ? status.Title : i18next.t('Misc.Unknown'));
colors.push(status ? status.Color : '#fff');
});
const dataset = new Model.Charts.Dataset(data).setBackgroundColor(colors);
return new Model.Charts.PieChartData(labels, [dataset]);
}
结果是:
4条答案
按热度按时间cld4siwp1#
有一个新插件(一年以来),名为chartjs-plugin-piechart-outlabels
仅导入源
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-piechart-outlabels"></script>
并将其与outlabeledPie类型一起使用
bn31dyow2#
我不能找到一个确切的插件,但我做一个。
https://codepen.io/BillDou/pen/oNoGBXb
kpbpu0083#
真实的的问题在于当切片很小时标签的重叠。你可以使用PieceLabel.js,它通过隐藏标签来解决重叠标签的问题。你提到你不能隐藏标签所以使用图例,它将显示所有切片的名称
或者,如果你想要确切的行为,你可以去与highcharts,但它需要许可证的商业用途。
第一个
Fiddle演示
ffscu2ro4#
我决定:我们将脚本添加到全局文件:
然后: