Chart.js 圆环图内部标签与外部标签不同
Chart.js Doughnut chart inner label different than outer
我正在尝试创建一个与其 'legend' 相比具有不同内部标签的图表。 Chart.js 当图例太长时会缩小,这会将我的图表推到非常小的尺寸。我拿了标签,在一定长度后将它们切掉,这就是新标签。但是我不知道如何有两个单独的标签,一个是 Legend 的缩短版本,另一个是正常长度。这是我的代码:
function truncLabel(str, maxwidth){
if(str.length > maxwidth) {
str = str.substring(0,24)+"...";
}
return str;
}
for (var i = 0 ; i < labels2Length; i++){
trunc_labels2[i] = formatLabel(labels2[i],20);
}
new Chart(document.getElementById("xxx"), {
type: 'doughnut',
data: {
labels: trunc_labels2,
datasets: [
{
label: labels2,
backgroundColor: ["#3e95cd", "#8e5ea2","#3cba9f","#e8c3b9","#c45850","#5e5ba3","#9fe7aa","#1a5ba3","#6cba1f","#cacf4f"],
data:data2
}
]} //More code follows but isnt needed here
Labels2 正确 returns 完整字符串,而 trunc_labels2 正确 returns 截断字符串。其他类型的图表具有此功能(即条形图、折线图等),但甜甜圈似乎没有?
谢谢
要截断 labels/strings - 使用 map()
method along with substring()
,例如:
let labels = [
'Lorem ipsum dolor sit amet',
'Lorem ipsum dolor sit amet',
'Lorem ipsum dolor sit amet'
];
let trunc_labels = labels.map(e => e.substring(0, 12) + '...');
现在,要在工具提示上显示原始标签,请使用以下工具提示 的 标签回调函数:
callbacks: {
label(t, d) {
let xLabel = labels[t.index],
yLabel = d.datasets[t.datasetIndex].data[t.index];
return xLabel + ': ' + yLabel;
}
}
* 确保labels
是一个全局变量。
ᴡᴏʀᴋɪɴɢ ᴇxᴀᴍᴘʟᴇ
let labels = [
'Lorem ipsum dolor sit amet',
'Lorem ipsum dolor sit amet',
'Lorem ipsum dolor sit amet'
];
let trunc_labels = labels.map(e => e.substring(0, 12) + '...');
let chart = new Chart(ctx, {
type: 'doughnut',
data: {
labels: trunc_labels,
datasets: [{
data: [1, 1, 1],
backgroundColor: [
'rgba(0, 119, 220, 0.8)',
'rgba(0, 119, 220, 0.6)',
'rgba(0, 119, 220, 0.4)'
]
}]
},
options: {
tooltips: {
callbacks: {
label(t, d) {
let xLabel = labels[t.index],
yLabel = d.datasets[t.datasetIndex].data[t.index];
return xLabel + ': ' + yLabel;
}
}
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.min.js"></script>
<canvas id="ctx"></canvas>
好的,我想我可以回答你的问题了。您必须确定 label
回调函数返回应显示在工具提示(弹出窗口)内的字符串:
options: {
tooltips: {
callbacks: {
label: function (item, data) {
return 'my custom label text';
}
}
}
这是 Plunker 的例子:
我正在尝试创建一个与其 'legend' 相比具有不同内部标签的图表。 Chart.js 当图例太长时会缩小,这会将我的图表推到非常小的尺寸。我拿了标签,在一定长度后将它们切掉,这就是新标签。但是我不知道如何有两个单独的标签,一个是 Legend 的缩短版本,另一个是正常长度。这是我的代码:
function truncLabel(str, maxwidth){
if(str.length > maxwidth) {
str = str.substring(0,24)+"...";
}
return str;
}
for (var i = 0 ; i < labels2Length; i++){
trunc_labels2[i] = formatLabel(labels2[i],20);
}
new Chart(document.getElementById("xxx"), {
type: 'doughnut',
data: {
labels: trunc_labels2,
datasets: [
{
label: labels2,
backgroundColor: ["#3e95cd", "#8e5ea2","#3cba9f","#e8c3b9","#c45850","#5e5ba3","#9fe7aa","#1a5ba3","#6cba1f","#cacf4f"],
data:data2
}
]} //More code follows but isnt needed here
Labels2 正确 returns 完整字符串,而 trunc_labels2 正确 returns 截断字符串。其他类型的图表具有此功能(即条形图、折线图等),但甜甜圈似乎没有? 谢谢
要截断 labels/strings - 使用 map()
method along with substring()
,例如:
let labels = [
'Lorem ipsum dolor sit amet',
'Lorem ipsum dolor sit amet',
'Lorem ipsum dolor sit amet'
];
let trunc_labels = labels.map(e => e.substring(0, 12) + '...');
现在,要在工具提示上显示原始标签,请使用以下工具提示 的 标签回调函数:
callbacks: {
label(t, d) {
let xLabel = labels[t.index],
yLabel = d.datasets[t.datasetIndex].data[t.index];
return xLabel + ': ' + yLabel;
}
}
* 确保labels
是一个全局变量。
ᴡᴏʀᴋɪɴɢ ᴇxᴀᴍᴘʟᴇ
let labels = [
'Lorem ipsum dolor sit amet',
'Lorem ipsum dolor sit amet',
'Lorem ipsum dolor sit amet'
];
let trunc_labels = labels.map(e => e.substring(0, 12) + '...');
let chart = new Chart(ctx, {
type: 'doughnut',
data: {
labels: trunc_labels,
datasets: [{
data: [1, 1, 1],
backgroundColor: [
'rgba(0, 119, 220, 0.8)',
'rgba(0, 119, 220, 0.6)',
'rgba(0, 119, 220, 0.4)'
]
}]
},
options: {
tooltips: {
callbacks: {
label(t, d) {
let xLabel = labels[t.index],
yLabel = d.datasets[t.datasetIndex].data[t.index];
return xLabel + ': ' + yLabel;
}
}
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.min.js"></script>
<canvas id="ctx"></canvas>
好的,我想我可以回答你的问题了。您必须确定 label
回调函数返回应显示在工具提示(弹出窗口)内的字符串:
options: {
tooltips: {
callbacks: {
label: function (item, data) {
return 'my custom label text';
}
}
}
这是 Plunker 的例子: