图表js工具提示如何控制显示的数据
chart js tooltip how to control the data that show
我正在使用chart.js插件并使用条形视图组图表。当我将鼠标悬停在一组工具条上时,我可以看到一个工具提示,显示这些工具条的数据。但我想改变工具提示,以显示我唯一的单一数据时,我将悬停栏的数据。以及如何显示不同的数据信息。jsfiddle示例
var ctx = document.getElementById("errorChart").getContext("2d");
var data = {
labels: ["January", "February", "March", "April", "May", "June", "July"],
datasets: [
{
label: "My First dataset",
fillColor: "rgba(220,220,220,0.5)",
strokeColor: "rgba(220,220,220,0.8)",
highlightFill: "rgba(220,220,220,0.75)",
highlightStroke: "rgba(220,220,220,1)",
data: [65, 0, 0, 0, 0, 0, 0]
},
{
label: "My Second dataset",
fillColor: "rgba(151,187,205,0.5)",
strokeColor: "rgba(151,187,205,0.8)",
highlightFill: "rgba(151,187,205,0.75)",
highlightStroke: "rgba(151,187,205,1)",
data: [28, 48, 40, 19, 86, 27, 90]
}
]
};
var myBarChart = new Chart(ctx).Bar(data);
您可以扩展条形图以包含此功能。默认情况下,它将返回您悬停过的索引处的两个栏,在创建工具提示之前,它还将检查您悬停过的区域是否有多个栏,并添加任何缺失的额外栏。
要做到这一点,你需要重写两个函数getBarsAtEvent和showToolTip这里是一个例子,然后点击
我已经试着让它清楚的两个重要的领域已经改变看看在扩展栏类型的注释。对helper的任何引用也做了一些小的更改,就像以前它们在作用域中一样,但是现在它们需要显式地调用Chart.helpers
Chart.types.Bar.extend({
name: "BarOneTip",
initialize: function(data){
Chart.types.Bar.prototype.initialize.apply(this, arguments);
},
getBarsAtEvent : function(e){
var barsArray = [],
eventPosition = Chart.helpers.getRelativePosition(e),
datasetIterator = function(dataset){
barsArray.push(dataset.bars[barIndex]);
},
barIndex;
for (var datasetIndex = 0; datasetIndex < this.datasets.length; datasetIndex++) {
for (barIndex = 0; barIndex < this.datasets[datasetIndex].bars.length; barIndex++) {
if (this.datasets[datasetIndex].bars[barIndex].inRange(eventPosition.x,eventPosition.y)){
//change here to only return the intrested bar not the group
barsArray.push(this.datasets[datasetIndex].bars[barIndex]);
return barsArray;
}
}
}
return barsArray;
},
showTooltip : function(ChartElements, forceRedraw){
console.log(ChartElements);
// Only redraw the chart if we've actually changed what we're hovering on.
if (typeof this.activeElements === 'undefined') this.activeElements = [];
var isChanged = (function(Elements){
var changed = false;
if (Elements.length !== this.activeElements.length){
changed = true;
return changed;
}
Chart.helpers.each(Elements, function(element, index){
if (element !== this.activeElements[index]){
changed = true;
}
}, this);
return changed;
}).call(this, ChartElements);
if (!isChanged && !forceRedraw){
return;
}
else{
this.activeElements = ChartElements;
}
this.draw();
console.log(this)
if (ChartElements.length > 0){
//removed the check for multiple bars at the index now just want one
Chart.helpers.each(ChartElements, function(Element) {
var tooltipPosition = Element.tooltipPosition();
new Chart.Tooltip({
x: Math.round(tooltipPosition.x),
y: Math.round(tooltipPosition.y),
xPadding: this.options.tooltipXPadding,
yPadding: this.options.tooltipYPadding,
fillColor: this.options.tooltipFillColor,
textColor: this.options.tooltipFontColor,
fontFamily: this.options.tooltipFontFamily,
fontStyle: this.options.tooltipFontStyle,
fontSize: this.options.tooltipFontSize,
caretHeight: this.options.tooltipCaretSize,
cornerRadius: this.options.tooltipCornerRadius,
text: Chart.helpers.template(this.options.tooltipTemplate, Element),
chart: this.chart
}).draw();
}, this);
}
return this;
}
});
然后使用它只是做你之前所做的,但使用BarOneTip(叫它任何你喜欢的,什么是在扩展图表的名称属性将提供给你。
var ctx = document.getElementById("errorChart").getContext("2d");
var data = {
labels: ["January", "February", "March", "April", "May", "June", "July"],
datasets: [
{
label: "My First dataset",
fillColor: "rgba(220,220,220,0.5)",
strokeColor: "rgba(220,220,220,0.8)",
highlightFill: "rgba(220,220,220,0.75)",
highlightStroke: "rgba(220,220,220,1)",
data: [65, 0, 0, 0, 0, 0, 0]
},
{
label: "My Second dataset",
fillColor: "rgba(151,187,205,0.5)",
strokeColor: "rgba(151,187,205,0.8)",
highlightFill: "rgba(151,187,205,0.75)",
highlightStroke: "rgba(151,187,205,1)",
data: [28, 48, 40, 19, 86, 27, 90]
}
]
};
var myBarChart = new Chart(ctx).BarOneTip(data);
我应该提到的是,如果chartjs得到更新,你需要手动将任何对函数的更改放入覆盖的
相关文章:
- 在控制台中显示下划线变量
- 滑块未显示,控制台中没有错误消息
- 为什么我的Alexa技能测试显示正确的lambda输出,但在开发人员控制台中测试时却给出错误消息
- 主干.js视图不会在页面加载时显示,但可以在控制台中与 jQuery 配合使用
- 函数在控制台中显示“未定义”
- 按 URL 的性质控制内容的显示 - MVC/HTML/ASP/JS
- 为什么参数对象没有在控制台中显示它的方法
- Chrome调试器中显示的“类名”基于什么?能控制吗?
- 显示最大值的控制编号
- 显示javascript控制台中的消息
- 函数getElementsByClassName()在控制台中显示错误
- 如何使用JavaScript/AngularJS在控制台中显示数组长度
- Json 值未显示在控制台中
- JSON对象在控制台中显示对象,但也包含来自php脚本返回的字符串的“未定义”
- 2 秒后在控制台中显示错误登录
- sharepoint 2013控制显示模板:如何知道我们'我会得到的
- Java和Javascript控制显示的方法,每像素像素
- 图表js工具提示如何控制显示的数据
- 如何获得焦点后的回发文本框和为什么重复器控制显示数据时,文本框是空的
- 改变网站的标题(通过angular路由器和ui路由器控制)显示在谷歌搜索