Javascript 如何在Chart.js 2.1.6中的图例中显示条形标签?
我正在使用Chart.js创建图表,我想在图例中显示条形图的标签,而不是数据集的标题(只有一个),请参见下图作为示例: 我当前的传奇如下所示: 我已经看了这些文件,但是没有用,我发现它们实际上很混乱 这是我目前的代码:Javascript 如何在Chart.js 2.1.6中的图例中显示条形标签?,javascript,chart.js,Javascript,Chart.js,我正在使用Chart.js创建图表,我想在图例中显示条形图的标签,而不是数据集的标题(只有一个),请参见下图作为示例: 我当前的传奇如下所示: 我已经看了这些文件,但是没有用,我发现它们实际上很混乱 这是我目前的代码: var chart_0 = new Chart($('#cp_chart_0'), { type: 'bar' , data: { labels: ['Blue','Green','Yellow','Red','Purple','Oran
var chart_0 = new Chart($('#cp_chart_0'), {
type: 'bar'
, data: {
labels: ['Blue','Green','Yellow','Red','Purple','Orange']
, datasets: [{
label: 'Dataset 1'
, borderWidth: 0
, backgroundColor: ['#2C79C5','#7FA830','#7B57C3','#ED4D40','#EC802F','#1DC6D3']
, data: ['12','2','5','0','9','1']
}]
}
});
谢谢 最简单的方法是为您的数据提供多个集合:
data: {
labels: ['total votes']
, datasets: [{
label: 'Blue'
, backgroundColor: ['#2C79C5']
, data: ['12']
},{
label: 'Green'
, backgroundColor: ['#7FA830']
, data: ['2']
},
...
]
}
但您可以使用generateLabels
-
甚至可以使用
legendCallback
-自定义整个图例(包括格式),在Chart.js 2.1.x的最新版本中,他们又添加了此功能。所以先去看看最新的版本吧。然后在下面插入代码
它位于选项和图例下。以下是您如何使用它:
options: {
legend: {
position: 'right'
}
}
此解决方案使用Chart.js版本3。您可以使用来预处理数据。API提供了可用于执行自定义代码的不同挂钩 我使用
beforeInit
钩子为每个定义的标签/值对创建单独的数据集。请注意,这些新数据集的数据
是以点格式定义的(例如[{x:1,y:12}]
):
此外,还需要定义第二个x轴,该轴将包含标签
x1: {
offset: true,
gridLines: {
display: false
}
}
每当数据集
的隐藏
状态更改时,需要以编程方式收集和定义x1
上的标签。这可以在beforeloayout
hook中完成
beforeLayout: chart => chart.options.scales.x1.labels = chart.config.data.datasets.filter((ds, i) => !chart.getDatasetMeta(i).hidden).map(ds => ds.label)
请看下面的可运行代码,看看它是如何工作的
新图表(“图表”{
类型:'bar',
插件:[{
beforeInit:chart=>{
让dataset=chart.config.data.datasets[0];
chart.config.data.datasets=chart.config.data.labels.map((l,i)=>({
标签:l,
数据:[{x:i+1,y:dataset.data[i]}],
backgroundColor:dataset.backgroundColor[i],
类别类别:1
}));
chart.config.data.labels=未定义;
},
beforeLayout:chart=>chart.options.scales.x1.labels=chart.config.data.datasets.filter((ds,i)=>!chart.getDatasetMeta(i).hidden.map(ds=>ds.label)
}],
数据:{
标签:[“蓝色”、“绿色”、“黄色”、“红色”、“紫色”、“橙色”],
数据集:[{
数据:['12','2','5','0','9','1'],
背景颜色:[“2C79C5”、“7FA830”、“FFF200”、“ED4D40”、“800080”、“EC802F”]
}]
},
选项:{
互动:{
是的,
模式:“最近的”
},
插件:{
图例:{
位置:'右'
},
工具提示:{
回调:{
标题:()=>未定义
}
}
},
比例:{
y:{
贝吉纳泽罗:是的
},
x:{
显示:假
},
x1:{
对,,
网格线:{
显示:假
}
}
}
}
});代码>
画布{
最大宽度:400px;
}
太好了,谢谢你的提示!最后,我按照雨果的答案分割成多个数据集,并用图表0.generateLegend()
创建了我自己的图例,这样我就有了更多的控制权-但在分割成多个数据集后,这也起到了作用。谢谢!我分成多个集合,然后用chart\u 0.generateLegend()
创建了自己的图例,这样我就可以更好地控制它了。
beforeLayout: chart => chart.options.scales.x1.labels = chart.config.data.datasets.filter((ds, i) => !chart.getDatasetMeta(i).hidden).map(ds => ds.label)