JavaScript Chart.js - 在工具提示上显示的自定义数据格式

Lau*_*mas 45 javascript code-formatting string-formatting number-formatting chart.js

我在这里查看了各种文档和类似的问题,但似乎无法找到特定的解决方案.如果我遗漏了任何明显或重复这个问题的道歉!

作为一些背景信息,我使用Chart.js插件实现了4个图形,并使用PHP从数据库传递了所需的数据.这一切都正常工作,很好.

我的问题是我需要将工具提示中的数据显示为格式化数据.与%数字一样.例如,我的数据库中的一个数据是-0.17222.我把它格式化为一个百分比显示在我的表中,一切都很好.但是,在设置chart.js条形图的数据时,数据显然缺少此格式并显示为-0.17222,这是我不想要的.

对不起,我想张贴一张照片,但我的声誉太垃圾了!

我从数据库中获取数据,然后设置到我的表中:

var kpiRex = new Handsontable(example1, {
    data: getRexData(),
Run Code Online (Sandbox Code Playgroud)

然后我在图表部分中提供这样的数据:

data: kpiRex.getDataAtRow(3)
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒!我已经被困在这几个小时了,这可能是我非常简单的事情.

小智 97

对于chart.js 2.0+,这已经改变了(不再是tooltipTemplate/multiTooltipTemplate).对于那些只想访问当前未格式化值并开始调整它的人,默认工具提示与以下内容相同:

options: {
    tooltips: {
        callbacks: {
            label: function(tooltipItem, data) {
                return tooltipItem.yLabel;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

即,您可以返回修改tooltipItem.yLabel,其中包含y轴值.就我而言,我想为金融图表添加一个美元符号,四舍五入和数千个逗号,所以我使用了:

options: {
    tooltips: {
        callbacks: {
            label: function(tooltipItem, data) {
                return "$" + Number(tooltipItem.yLabel).toFixed(0).replace(/./g, function(c, i, a) {
                    return i > 0 && c !== "." && (a.length - i) % 3 === 0 ? "," + c : c;
                });
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @RafaelTSCS,您可以将返回值换成`return data.datasets [tooltipItem.datasetIndex] .label +“ $”`以保留标签 (3认同)
  • 文档链接:http://www.chartjs.org/docs/latest/configuration/tooltip.html#label-callback (3认同)
  • 这很好,但是会删除系列的标签 (2认同)

Pat*_*ice 35

在chart.js 2.1.6中,我做了类似这样的事情(在typescript中):

  let that = this;
  options = {
    legend: {
      display: false,
      responsive: false
    },
    tooltips: {
      callbacks: {
        label: function(tooltipItem, data) {
          let account: Account = that.accounts[tooltipItem.index];
          return account.accountNumber+":"+account.balance+"€";
        }
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)


rto*_*ome 34

您想在图表选项中指定自定义工具提示模板,如下所示:

 // String - Template string for single tooltips
 tooltipTemplate: "<%if (label){%><%=label %>: <%}%><%= value + ' %' %>",
 // String - Template string for multiple tooltips
 multiTooltipTemplate: "<%= value + ' %' %>",
Run Code Online (Sandbox Code Playgroud)

这样,您可以在值之后添加'%'符号,如果这是您想要的.

这里有一个的jsfiddle来说明这个.

需要注意的是tooltipTemplate适用,如果你只有一个数据集,multiTooltipTemplate如果有多个数据集应用.

此选项在文档全局图表配置部分中提到.看看,值得检查可以在那里定制的所有其他选项.

请注意,您的数据集应仅包含数值.(没有%标志或其他东西).

  • 非常感谢你!之前我使用的是tooltipTemplate,但我必须使用multiTooltipTemplate,因为我有4个图表.不知道我是怎么错过这个选项的!它现在正在工作!再次感谢您抽出宝贵时间. (3认同)

Ari*_*bib 11

您可以为tooltipTemplate提供一个函数,并根据需要格式化工具提示:

tooltipTemplate: function(v) {return someFunction(v.value);}
multiTooltipTemplate: function(v) {return someOtherFunction(v.value);}
Run Code Online (Sandbox Code Playgroud)

给定'v'参数的那些包含除'value'属性之外的许多信息.您可以在该函数中放置一个"调试器"并自行检查.


小智 10

这里的答案在 Char.js 3.8.0 上对我不起作用。显然,工具提示选项回调对象已移动。现在它位于 options.plugins.tooltip 下

https://www.chartjs.org/docs/latest/configuration/tooltip.html

OP 示例:

    options: {
        plugins: {
            tooltip: {
                callbacks: {
                    label: function (tooltipItem, data) {
                        console.log(data);
                        console.log(tooltipItem);
                        return tooltipItem.formattedValue + '%';
                    }
                }
            }
        },
        ...
Run Code Online (Sandbox Code Playgroud)


Sha*_*eer 6

这对我来说非常有效。它需要标签并格式化值。

options: {
        tooltips: {
            callbacks: {
                label: function(tooltipItem, data) {

                    let label = data.labels[tooltipItem.index];
                    let value = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];
                    return ' ' + label + ': ' + value + ' %';

                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)


小智 6

tooltips: {
    callbacks: {
        label: function (tooltipItem) {
            return (new Intl.NumberFormat('en-US', {
                style: 'currency',
                currency: 'USD',
            })).format(tooltipItem.value);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码可以解决问题,但[包括解释](//meta.stackexchange.com/q/114762) 如何以及为何解决问题确实有助于提高帖子的质量,并可能会带来更多结果赞成票。请记住,您是在为将来的读者回答问题,而不仅仅是现在提问的人。请[编辑]您的答案以添加解释并指出适用的限制和假设。[来自评论](/review/low-quality-posts/25775722) (9认同)

Adm*_*mir 5

tooltips: {
          callbacks: {
            label: (tooltipItem, data) => {
              // data for manipulation
              return data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];
            },
          },
        },
Run Code Online (Sandbox Code Playgroud)