Chart.js2.X中的条形值-数据集元数据未定义
Bar values in Chart.js 2.X - dataset.metadata undefined
我是Chart.js 2的新手,如果有任何帮助,我们将不胜感激。
我正在尝试显示图表中每个条形图的值。正如使用chart.js 2.0.2和其他用户在Pareto图中显示值中所建议的那样,我正在使用此解决方案。但是,此部分抛出异常TypeError: dataset.metaData is undefined
:
dataset.metaData.forEach(function(p) {
ctx.fillText(p._chart.config.data.datasets[p._datasetIndex].data[p._index], p._model.x, p._model.y + 20);
});
我只想在条形图上显示数值。有什么帮助吗?
有了下面更新的onComplete
,您的代码应该可以使用Chart.js v2.1
...
var options = {
animation: {
onComplete: function() {
var ctx = this.chart.ctx;
ctx.textAlign = "center";
ctx.textBaseline = "middle";
var chart = this;
var datasets = this.config.data.datasets;
datasets.forEach(function (dataset, i) {
ctx.font = "20px Arial";
switch (dataset.type) {
case "line":
ctx.fillStyle = "Black";
chart.getDatasetMeta(i).data.forEach(function (p, j) {
ctx.fillText(datasets[i].data[j], p._model.x, p._model.y - 20);
});
break;
case "bar":
ctx.fillStyle = "White";
chart.getDatasetMeta(i).data.forEach(function (p, j) {
ctx.fillText(datasets[i].data[j], p._model.x, p._model.y + 20);
});
break;
}
});
}
},
...
Fiddle-http://jsfiddle.net/0j4g7kxy/
我假设您只需要栏,但我在onComplete
中保留了行的代码,所以它也应该适用于行。如果不需要,只需从onComplete
代码中删除相关的case
即可
除了potatopeelings的答案,使用Chart.js v2.5,我不得不调整以下内容:
switch (dataset.type)
至switch ( chart.getDatasetMeta(i).type )
适合我图表.js 2.5.0
除了potatopeelings和slashpm的答案。
要处理水平条,您可以添加这种情况(将填充"offsetY"更改为"offsetX")
case "horizontalBar":
ctx.fillStyle = "Black";
chart.getDatasetMeta(i).data.forEach(function (p, j) {
ctx.fillText(datasets[i].data[j], p._model.x + 20, p._model.y);
});
break;
这是全功能
function chartValuesShow() { // show max values of the chart
var ctx = this.chart.ctx;
ctx.textAlign = "center";
ctx.textBaseline = "middle";
var chart = this;
var datasets = this.config.data.datasets;
datasets.forEach(function (dataset, i) {
ctx.fontSize = "10px";
switch (chart.getDatasetMeta(i).type) {
case "line":
ctx.fillStyle = "Black";
chart.getDatasetMeta(i).data.forEach(function (p, j) {
ctx.fillText(datasets[i].data[j], p._model.x, p._model.y - 20);
});
break;
case "bar":
ctx.fillStyle = "Black";
chart.getDatasetMeta(i).data.forEach(function (p, j) {
ctx.fillText(datasets[i].data[j], p._model.x, p._model.y + 20);
});
break;
case "horizontalBar":
ctx.fillStyle = "Black";
chart.getDatasetMeta(i).data.forEach(function (p, j) {
ctx.fillText(datasets[i].data[j], p._model.x + 20, p._model.y);
});
break;
}
});
}
我对它进行了一点调整,使其适用于水平条形图,以显示值的总和,而不是堆叠值。也许有人可以稍微美化一下代码,但它是这样工作的:
onComplete: function() {
var ctx = this.chart.ctx;
ctx.textAlign = "center";
ctx.textBaseline = "middle";
var chart = this;
var datasets = this.config.data.datasets;
var sum=new Array();
datasets.forEach(function (dataset, i) {
ctx.font = "10px Arial";
switch ( chart.getDatasetMeta(i).type ) {
case "line":
ctx.fillStyle = "Black";
chart.getDatasetMeta(i).data.forEach(function (p, j) {
ctx.fillText(datasets[i].data[j], p._model.x, p._model.y - 20);
});
break;
case "bar":
ctx.fillStyle = "White";
chart.getDatasetMeta(i).data.forEach(function (p, j) {
ctx.fillText(datasets[i].data[j], p._model.x, p._model.y + 20);
});
break;
case "horizontalBar":
ctx.fillStyle = "Black";
chart.getDatasetMeta(i).data.forEach(function (p, j) {
if (sum[j]== null) { sum[j] = 0; }
sum[j]=sum[j]+parseFloat(datasets[i].data[j]);
if (i==datasets.length-1) {ctx.fillText(sum[j], p._model.x+10, p._model.y);}
});
break;
}
});
}
相关文章:
- React中的数据集表示
- 使用相同的数据集绘制各种符号
- 多维数据集网格未在指定的分区中绘制
- chart.js 2.0为数据集添加了新属性
- Kendo网格中数据集的最高值
- 具有大型数据集的组件仅在 IE11/Edge 上运行缓慢
- 具有关联数组数据集的D3.js表
- javascript中网络图表的大型数据集
- 具有多个数据集的分组散点图D3
- 如何在web上动态可视化数据集
- 访问Twilio短信元数据
- Javascript D3如何从CSV访问和操作数据集
- Firebase-返回用户uid并将用户元数据值设置为不同的节点
- Chart.js2.X中的条形值-数据集元数据未定义
- E4X中是否有一种方法可以将基元数据类型的XMLList转换为类似于Array.join()的Array
- 访问HTML数据集
- D3.js如何只创建一个绑定到多个数据项的数据集的元素
- 如何使用数据集访问数据属性值
- 对过滤行进行分页 — 重置原始数据集 — jQuery 数据表
- 如何使用JavaScript检索文档集的元数据