Chart.js 始终在所有数据集上显示最后一个工具提示,是否将其余工具提示保留为悬停显示?ChartJS
我有点执着于如何实现这一点,因为它与插件的功能相比有点非正统 我试图让每个数据集始终保持最后一个工具提示处于打开状态,而让其余的工具提示显示在悬停状态 目前,我正在使用此选项来保持它们全部显示:Chart.js 始终在所有数据集上显示最后一个工具提示,是否将其余工具提示保留为悬停显示?ChartJS,chart.js,Chart.js,我有点执着于如何实现这一点,因为它与插件的功能相比有点非正统 我试图让每个数据集始终保持最后一个工具提示处于打开状态,而让其余的工具提示显示在悬停状态 目前,我正在使用此选项来保持它们全部显示: Chart.plugins.register({ beforeRender: function (chart) { if (chart.config.options.showAllTooltips) { chart.plug
Chart.plugins.register({
beforeRender: function (chart) {
if (chart.config.options.showAllTooltips) {
chart.pluginTooltips = [];
chart.config.data.datasets.forEach(function (dataset, i) {
console.log(chart);
chart.getDatasetMeta(i).data.forEach(function (sector, j) {
console.log(sector);
chart.pluginTooltips.push(new Chart.Tooltip({
_chart: chart.chart,
_chartInstance: chart,
_data: chart.data,
_options: chart.options.tooltips,
_active: [sector]
}, chart));
});
});
chart.options.tooltips.enabled = false;
}
},
afterDraw: function (chart, easing) {
if (chart.config.options.showAllTooltips) {
if (!chart.allTooltipsOnce) {
if (easing !== 1) {
return;
}
chart.allTooltipsOnce = true;
}
chart.options.tooltips.enabled = true;
Chart.helpers.each(chart.pluginTooltips, function (tooltip) {
tooltip.initialize();
tooltip.update();
tooltip.pivot();
tooltip.transition(easing).draw();
});
chart.options.tooltips.enabled = false;
}
}
});
是否有方法仅对每个数据集中的最后一个工具提示执行此操作
我发现了一种隐藏工具提示的方法:
filter: function (tooltipItem, data) {
var label = data.labels[tooltipItem.index];
if (label === labels[labels.length - 1]) {
console.log(tooltipItem);
} else {
return true;
}
}
但这根本不显示它们,因为它返回false
最终,它将如下所示,在相应节点的悬停位置显示其他工具提示:
非常感谢您的帮助。我将尝试使用它来完成这项任务
你可以直接在他们的网页上试用-
设置
设置一些随机数据:
var DATA_COUNT = 8;
var labels = [];
Utils.srand(100);
for (var i = 0; i < DATA_COUNT; ++i) {
labels.push('' + i);
}
var DATA_COUNT = 8;
var labels = [];
Utils.srand(100);
for (var i = 0; i < DATA_COUNT; ++i) {
labels.push('' + i);
}
这里的主要部分是:
formatter: function(value, context) {
value = Math.round(value * 100) / 100;
if (context.dataIndex === context.dataset.data.length - 1) {
return context.dataset.label + '\n' + value + '%';
} else {
return context.active
? context.dataset.label + '\n' + value + '%'
: ''
}
},
格式化程序:
其中我仅为context.dataIndex===context.dataset.data.length-1永久显示标签
在其他情况下,如果它处于非活动状态,我只显示空框;在其他情况下(悬停),我显示信息
看起来怎么样?
- 禁止悬停
- 鼠标悬停
所以这是整个hmtl文件以及所有相关代码。正如我所说,我不是程序员。这项工作来自大量的尝试和错误,包括stackoverflow问题中的几位代码
<script>
$(document).ready(function () {
showtempGraph();
});
function showtempGraph()
{
{
$.post("temperaturedata.php",
function (data)
{
console.log(data);
var temptime = [];
var temp = [];
for (var i in data) {
temptime.push(data[i].timestamp);
temp.push(data[i].temperature);
}
var tempmin = Math.min(...temp);
var tempmax = Math.max(...temp);
var charttempdata = {
labels: temptime,
datasets: [
{
label: 'Temperatur',
pointRadius: 3,
backgroundColor: 'rgba(26, 137, 245, 0.2)',
borderColor: 'rgba(26, 137, 245, 1)',
hoverBackgroundColor: 'rgba(255, 255, 255, 1)',
hoverBorderColor: 'rgba(255, 255, 255, 1)',
pointBackgroundColor: 'rgba(12, 68, 122, 1)',
pointHoverBorderColor: "rgba(255, 255, 255, 0.8)",
data: temp
}
]
};
var graphtempTarget = $("#tempgraphCanvas");
var linetempGraph = new Chart(graphtempTarget, {
type: 'line',
data: charttempdata,
options: {
maintainAspectRatio: false,
tooltips: {
enabled: true,
custom: function(tooltip) {
if (!tooltip) return;
tooltip.displayColors = false;
},
callbacks: {
title: function(tooltipItems, tempdata) {
return 'Klokken: ' + tooltipItems[0].xLabel;
},
label: function(tooltipItem, tempdata) {
return 'Temperatur: ' + Number(tooltipItem.yLabel).toFixed(2) + '°C';
}
}
},
legend: {
display: false,
},
responsive: true,
scales: {
xAxes: [{
type: 'time',
time: {
displayFormats: {
hour: 'HH:mm'
},
tooltipFormat: 'HH:mm',
},
unit : 'day',
gridLines: {
color: '#999999',
lineWidth: 1
},
ticks: {
fontColor: "#fff",
}
}],
yAxes: [
{
type: 'linear',
position: 'left',
gridLines: {
color: '#999999',
lineWidth: 1
},
ticks: {
fontColor: "#fff",
}
}, {
type: 'linear',
position: "right",
afterUpdate: function(scaleInstance) {
console.dir(scaleInstance);
},
gridLines: {
color: '#999999)',
lineWidth: 0.5
},
ticks: {
stepSize: tempmax - tempmin,
min: tempmin,
max: tempmax,
mirror: true,
padding: -10,
fontColor: "#fff",
fontSize: 18,
callback: function(value) {
return value + '°C';
}
},
scaleLabel: {
display: true,
labelString: '°C',
fontColor: "#fff",
fontSize: 14
}
}]
},
}
});
});
}
}
</script>
$(文档).ready(函数(){
showtempGraph();
});
函数showtempGraph()
{
{
$.post(“temperaturedata.php”,
功能(数据)
{
控制台日志(数据);
var testime=[];
var-temp=[];
用于(数据中的var i){
push(数据[i].时间戳);
温度推送(数据[i]。温度);
}
var tempmin=Math.min(…temp);
var tempmax=数学最大值(…temp);
var charttempdata={
标签:TENTIME,
数据集:[
{
标签:“温度”,
点半径:3,
背景颜色:“rgba(26,137,245,0.2)”,
边框颜色:“rgba(26,137,245,1)”,
hoverBackgroundColor:'rgba(255,255,255,1)',
hoverBorderColor:'rgba(255,255,255,1)',
pointBackgroundColor:“rgba(12,68,122,1)”,
pointHoverBorderColor:“rgba(255,255,255,0.8)”,
数据:临时
}
]
};
var graphtempTarget=$(“临时GraphCanvas”);
var linetempGraph=新图表(graphtempTarget{
键入:“行”,
数据:图表数据,
选项:{
MaintaintAspectRatio:false,
工具提示:{
启用:对,
自定义:函数(工具提示){
如果(!工具提示)返回;
tooltip.displayColor=false;
},
回调:{
标题:函数(工具提示项、tempdata){
返回'Klokken:'+工具提示项[0].xLabel;
},
标签:函数(工具提示项、tempdata){
返回'temperature:'+数字(tooltipItem.yLabel).toFixed(2)+'°C';
}
}
},
图例:{
显示:假,
},
回答:是的,
比例:{
xAxes:[{
键入:“时间”,
时间:{
显示格式:{
小时:“HH:mm”
},
tooltipFormat:'HH:mm',
},
单位:'天',
网格线:{
颜色:“#999999”,
线宽:1
},
滴答声:{
fontColor:#fff“,
}
}],
雅克斯:[
{
类型:'线性',
位置:'左',
网格线:{
颜色:“#999999”,
线宽:1
},
滴答声:{
fontColor:#fff“,
}
}, {
类型:'线性',
位置:“对”,
更新后:函数(scaleInstance){
console.dir(scaleInstance);
},
网格线:{
颜色:‘#999999’,
线宽:0.5
},
滴答声:{
步长:tempmax-tempmin,
敏:坦普敏,
麦克斯:麦克斯,
镜子:是的,
填充:-10,
<script>
$(document).ready(function () {
showtempGraph();
});
function showtempGraph()
{
{
$.post("temperaturedata.php",
function (data)
{
console.log(data);
var temptime = [];
var temp = [];
for (var i in data) {
temptime.push(data[i].timestamp);
temp.push(data[i].temperature);
}
var tempmin = Math.min(...temp);
var tempmax = Math.max(...temp);
var charttempdata = {
labels: temptime,
datasets: [
{
label: 'Temperatur',
pointRadius: 3,
backgroundColor: 'rgba(26, 137, 245, 0.2)',
borderColor: 'rgba(26, 137, 245, 1)',
hoverBackgroundColor: 'rgba(255, 255, 255, 1)',
hoverBorderColor: 'rgba(255, 255, 255, 1)',
pointBackgroundColor: 'rgba(12, 68, 122, 1)',
pointHoverBorderColor: "rgba(255, 255, 255, 0.8)",
data: temp
}
]
};
var graphtempTarget = $("#tempgraphCanvas");
var linetempGraph = new Chart(graphtempTarget, {
type: 'line',
data: charttempdata,
options: {
maintainAspectRatio: false,
tooltips: {
enabled: true,
custom: function(tooltip) {
if (!tooltip) return;
tooltip.displayColors = false;
},
callbacks: {
title: function(tooltipItems, tempdata) {
return 'Klokken: ' + tooltipItems[0].xLabel;
},
label: function(tooltipItem, tempdata) {
return 'Temperatur: ' + Number(tooltipItem.yLabel).toFixed(2) + '°C';
}
}
},
legend: {
display: false,
},
responsive: true,
scales: {
xAxes: [{
type: 'time',
time: {
displayFormats: {
hour: 'HH:mm'
},
tooltipFormat: 'HH:mm',
},
unit : 'day',
gridLines: {
color: '#999999',
lineWidth: 1
},
ticks: {
fontColor: "#fff",
}
}],
yAxes: [
{
type: 'linear',
position: 'left',
gridLines: {
color: '#999999',
lineWidth: 1
},
ticks: {
fontColor: "#fff",
}
}, {
type: 'linear',
position: "right",
afterUpdate: function(scaleInstance) {
console.dir(scaleInstance);
},
gridLines: {
color: '#999999)',
lineWidth: 0.5
},
ticks: {
stepSize: tempmax - tempmin,
min: tempmin,
max: tempmax,
mirror: true,
padding: -10,
fontColor: "#fff",
fontSize: 18,
callback: function(value) {
return value + '°C';
}
},
scaleLabel: {
display: true,
labelString: '°C',
fontColor: "#fff",
fontSize: 14
}
}]
},
}
});
});
}
}
</script>