如何使用Chart.js显示折线图数据集点标签?

2023-11-25

我的设计要求是显示包含 5 个趋势数据集的折线图。沿着笔画线的每个数据值需要在其各自的数据点处显示数据值标签。

不幸的是,我在 Charts.js 中找不到满足此要求的选项。

有解决方法可以帮助我吗?

我也在小提琴上发布了这个:http://jsfiddle.net/s9eannLh/

非常感谢!

    var data = {
                labels: ["","Jun 2013","Jul 2013","Aug 2013","Sep 2013","Oct 2013","Nov 2013","Dec 2013","Jan 2014","Feb 2014","Mar 2014","Apr 2014","May 2014"],
                datasets: [
                    {
                        label: "hemoglobin_1",
                        title: "test",
                        fillColor: "transparent",
                        strokeColor: "#65204c",
                        pointColor: "#65204c",
                        pointHighlightStroke: "#FFF",
                        data: [null,5.7,5.7,5.8,5.7,5.8,5.7,5.9,6.7,6.7,6.5,6.4,6.4]
                    },
                    {
                        label: "hemoglobin_2",
                        fillColor: "transparent",
                        strokeColor: "#ed7141",
                        pointColor: "#ed7141",
                        pointHighlightStroke: "#FFF",
                        data: [null,15.5,15.5,15.6,15.2,15.6,15.1,15.8,17,17.4,16.8,16.4,16.4]
                    },                    
                    {
                        label: "hemoglobin_3",
                        fillColor: "transparent",
                        strokeColor: "#de4760",
                        pointColor: "#de4760",
                        pointHighlightStroke: "#FFF",
                        data: [null,37.1,37,37.2,37.6,36.9,37.6,36.8,37.6,38,37.5,39.1,37.5]
                    },
                    {
                        label: "hemoglobin_4",
                        fillColor: "transparent",
                        strokeColor: "#fdcf7e",
                        pointColor: "#fdcf7e",                          
                        pointHighlightStroke: "#FFF",
                        data: [null,29.9,30.4,29.5,29.6,30.2,29.4,29.8,26.9,27,28.5,26.8,28.5]
                     },                                        
                    {
                        label: "hemoglobin_5",
                        fillColor: "transparent",
                        strokeColor: "#a33a59",
                        pointColor: "#a33a59",
                        pointHighlightStroke: "#FFF",
                        data: [null,11.8,11.4,11.9,11.9,11.5,12.2,11.7,11.8,10.9,10.7,11.3,11.3]
                    }
                ]
            };

            var options = {
                responsive: true,
                scaleOverride: true,
                scaleSteps: 10,
                scaleStepWidth: 5,
                scaleStartValue: 0,
                showTooltips: false,
                pointDot: true,
                pointDotRadius : 6,
                datasetStrokeWidth : 3,
                bezierCurve : false,
                scaleShowHorizontalLines: false,
                scaleGridLineWidth : 2,
                scaleGridLineColor : "#EEEEEE",
                scaleLineWidth: 3,
                scaleLineColor: "#000000",
                scaleFontFamily: '"Gotham Book",sans-serif',
                scaleFontSize: 18
            }

            var ctx = $("#myChart").get(0).getContext("2d");
            var Trends = new Chart(ctx).Line(data, options);

我终于找到了这个问题的解决方案。

我意识到我可以访问 DOM 中的图表对象:

Trends.datasets

在五个数据集中,每个数据集中都有一个包含 x 和 y 位置的尖头对象:

Trends.datasets[0..4].points

因此,我利用 Chart.js 中的全局配置函数通过回调解析了这些点:

    // Function - Will fire on animation progression.
     onAnimationProgress: function(){},

   // Function - Will fire on animation completion.
    onAnimationComplete: function(){}

我发现我必须使用onAnimationComplete with responsive: true因为点标签会在调整大小事件时被擦除。

一旦我在回调中找到了点,我只需将我想要的标签写到画布上即可。

我对代码的添加是:

var options = {
    onAnimationProgress: function() { drawDatasetPointsLabels() },
    onAnimationComplete: function() { drawDatasetPointsLabels() }
}

增加功能后:

    function drawDatasetPointsLabels() {
            ctx.font = '.9rem "Gotham Book",sans-serif';
            ctx.fillStyle = '#AAA';
            ctx.textAlign="center";
            $(Trends.datasets).each(function(idx,dataset){
                $(dataset.points).each(function(pdx,pointinfo){
                    // First dataset is shifted off the scale line. 
                    // Don't write to the canvas for the null placeholder.
                    if ( pointinfo.value !== null ) { 
                        ctx.fillText(pointinfo.value,pointinfo.x,pointinfo.y - 15);
                    }
                });
            });         
         }

这是完整的代码源以及提供解决方案的新代码:

    var data = {
                labels: ["","Jun 2013","Jul 2013","Aug 2013","Sep 2013","Oct 2013","Nov 2013","Dec 2013","Jan 2014","Feb 2014","Mar 2014","Apr 2014","May 2014"],
                datasets: [
                    {
                        label: "hemoglobin_1",
                        fillColor: "transparent",
                        strokeColor: "#65204c",
                        pointColor: "#65204c",
                        pointHighlightStroke: "#FFF",
                        data: [null,5.7,5.7,5.8,5.7,5.8,5.7,5.9,6.7,6.7,6.5,6.4,6.4]
                    },
                    {
                        label: "hemoglobin_2",
                        fillColor: "transparent",
                        strokeColor: "#ed7141",
                        pointColor: "#ed7141",
                        pointHighlightStroke: "#FFF",
                        data: [null,15.5,15.5,15.6,15.2,15.6,15.1,15.8,17,17.4,16.8,16.4,16.4]
                    },                    
                    {
                        label: "hemoglobin_3",
                        fillColor: "transparent",
                        strokeColor: "#de4760",
                        pointColor: "#de4760",
                        pointHighlightStroke: "#FFF",
                        data: [null,37.1,37,37.2,37.6,36.9,37.6,36.8,37.6,38,37.5,39.1,37.5]
                    },
                    {
                        label: "hemoglobin_4",
                        fillColor: "transparent",
                        strokeColor: "#fdcf7e",
                        pointColor: "#fdcf7e",                          
                        pointHighlightStroke: "#FFF",
                        data: [null,29.9,30.4,29.5,29.6,30.2,29.4,29.8,26.9,27,28.5,26.8,28.5]
                     },                                        
                    {
                        label: "hemoglobin_5",
                        fillColor: "transparent",
                        strokeColor: "#a33a59",
                        pointColor: "#a33a59",
                        pointHighlightStroke: "#FFF",
                        data: [null,11.8,11.4,11.9,11.9,11.5,12.2,11.7,11.8,10.9,10.7,11.3,11.3]
                    }
                ]
            };

    var options = {
                responsive: true,
                scaleOverride: true,
                scaleSteps: 10,
                scaleStepWidth: 5,
                scaleStartValue: 0,
                showTooltips: false,
                pointDot: true,
                pointDotRadius : 6,
                datasetStrokeWidth : 3,
                bezierCurve : false,
                scaleShowHorizontalLines: false,
                scaleGridLineWidth : 2,
                scaleGridLineColor : "#EEEEEE",
                scaleLineWidth: 3,
                scaleLineColor: "#000000",
                scaleFontFamily: '"Gotham Book",sans-serif',
                scaleFontSize: 18,
                onAnimationProgress: function() { drawDatasetPointsLabels() },
                onAnimationComplete: function() { drawDatasetPointsLabels() }                    
            }
            var ctx = $("#myChart").get(0).getContext("2d");
            var Trends = new Chart(ctx).Line(data, options);            

        function drawDatasetPointsLabels() {
            ctx.font = '.9rem "Gotham Book",sans-serif';
            ctx.fillStyle = '#AAA';
            ctx.textAlign="center";
            $(Trends.datasets).each(function(idx,dataset){
                // First dataset is shifted off the scale line. 
                // Don't write to the canvas for the null placeholder.
                $(dataset.points).each(function(pdx,pointinfo){
                    if ( pointinfo.value !== null ) {
                        ctx.fillText(pointinfo.value,pointinfo.x,pointinfo.y - 15);
                    }
                });
            });         
        }

这是 jsfiddle 上原始的有问题的版本:http://jsfiddle.net/s9eannLh

[更新的链接]这是 jsfiddle 上更新的解决方案:https://jsfiddle.net/s9eannLh/82/

谢谢大家!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用Chart.js显示折线图数据集点标签? 的相关文章

  • 动态添加案例到交换机

    我需要动态地将案例添加到交换机 我希望用户能够添加项目 并且每个项目都需要它自己的开关盒 您可以使用带有回调函数的对象 You can have initial cases var callbacks something gt 42 and
  • div 中的文本字符有限,添加“阅读更多”链接并在单击链接时显示所有字符

    我有一个 div 里面有文本 使用 PHP 和 MySQL 显示 结构如下 div class description p Here is a lot of text p div 我想在 p 标签内的文本超过 100 个字符时显示 阅读更多
  • 未捕获的 TypeMismatchError:无法在“CanvasRenderingContext2D”上执行“drawImage”

    我对以下代码片段有疑问 var o inserted motive find span contains document documentElement o 0 b fillText m i h b drawImage d i h e f
  • Chart.js - 在哪里可以找到应该注册哪些组件?

    我是 Chart js 的新手 看到了 v3 文档 Chart js 3 是可摇树的 因此有必要导入并注册您将要使用的控制器 元素 比例和插件 我想知道在哪里可以找到这些用于注册的东西 例如需要注册什么这个例子 https www char
  • 如何按多个项目搜索/过滤列表?

    我正在寻找一个示例 或者可能是一个关于通过在文本框中输入的多个项目来过滤 搜索项目列表的方法的一点提示 假设我有一个列表 ul li Coffee li li Tea li li Milk li li Water li li Juice l
  • 如何在bootstrap中默认隐藏侧边栏?

    我在这里有一个很好的参考 作为 Bootstrap 在设计 Web 表单应用程序时的侧边栏 http startbootstrap com template overviews simple sidebar http startbootst
  • jQuery 检查字体粗细是正常还是粗体

    我使用以下代码设置 font weight 属性 this css font weight normal 现在我想检查一个元素是否具有粗体或正常的字体粗细属性 我该怎么做 你可以使用以下方法得到它 fontWeight this css f
  • 在多个动态添加的表单上初始化 jQuery validate() 函数

    有人建议最好初始化一个 form validate 在页面加载而不是点击事件上运行 jquery form validate 插件仅允许在输入更改时提交 https stackoverflow com questions 10984196
  • 用javascript调用外部网页(跨域)

    我正在尝试使用以下网络服务来验证提要这个问题 https stackoverflow com questions 11996430 check if a url is a valid feed 但浏览器不允许我向另一台服务器发送 ajax
  • jQuery Find() 和 XML 在 IE 中不起作用

    我正在尝试使用 jQuery 来解析内存中的 XML 文档 除了 IE 之外 这在所有东西上都很有效 令人震惊 一些谷歌搜索显示 问题很可能是由于 IE 将我的文档视为 HTML 而不是 XML MIME 类型 有没有办法让我的 jQuer
  • Ajax 没有将我重定向到下一页

    我正在尝试将单击的图像的 ID 传递到下一页 当我开发代码时 它没有将我重定向到下一页 当我单击 F12 并检查网络中的 POST 时 它显示变量已正确传递到下一页 如附图所示 但它没有将我重定向到下一页 所以现在我知道变量在下一页中正确传
  • jquery select 如果 option.value 等于某个值,则标记为选中

    我有一些关于 jquery 选择的问题 就我而言 如果option value等于某物 标记 aselected为了它 在线代码在这里 http jsfiddle net WnEfJ 再次重复代码 它引起了Uncaught TypeErro
  • 在画布上绘制多个矩形

    我试图在鼠标移动时在画布上添加多个矩形 但是当我在图像上绘制矩形时 画布上的背面图像也会被清除 我不想删除它 我想要画布上有多个矩形而不清除画布图像 请检查下面的 JavaScript 代码 var canvas document getE
  • 仅当表单已提交时才触发 jQuery 表单验证?

    不引人注目的验证基于这样的想法 don t进行表单验证 直到用户提交表单 一旦发生这种情况 如果表单上的某些内容无效 那么一旦用户更改了每个字段 就会立即验证它 我想做的是 不显眼地 触发表单元素的验证 也就是说 only如果用户已尝试提交
  • 如何使用 JavaScript 中的值填充下拉列表?

    我在 Tridion CMS 扩展中的功能区工具栏按钮中添加了一个按钮 单击该按钮后 将显示一个弹出页面 其中包含两个下拉菜单 通过更改第一个下拉控件中的值 我应该填充第二个下拉控件的值 就我而言 我正在使用ASP drop down li
  • 非 DOM 对象上的 jQuery 自定义事件

    我最近阅读了一些代码 其功能如下 bob name Bob Smith rank 7 bob bind nameChanged function bob trigger nameChanged 这似乎有效 但我在 jQuery 文档或源代码
  • 如何让 jquery Tooltipster 插件适用于新创建的 DOM 元素?

    我正在使用 Tooltipster 插件http calebjacob com tooltipster http calebjacob com tooltipster 这很棒 但我已经动态生成了插入到 DOM 中的内容 工具提示程序似乎没有
  • Chartjs刻度标签位置

    尝试让 Y 轴刻度标签看起来像image https i stack imgur com XgoxX png 位于秤顶部且不旋转 缩放选项当前如下所示 scales yAxes id temp scaleLabel display true
  • 当用户单击链接时,如何记录 MixPanel 事件?

    当用户单击某种类型的链接时 我试图在 MixPanel 中记录一个事件 我正在使用 JQuery 不引人注意地完成此操作 据我所知 我需要添加一个回调函数 以便在记录事件后将用户带到 URL 这是我正在使用的代码 不幸的是
  • 单击引导分页链接时调用 jquery 函数

    我想在单击引导分页链接时调用 jquery 函数 假设我想从第1页遍历到第2页 应该调用一个jquery函数 我正在使用以下代码 但它不起作用 ul pagination on click li function alert page ch

随机推荐

  • R:命名列表和描述列表

    R 有两个不常用的类 Dlist 和 namedList 关于第一点 提到了Sys getenv 如果缺少参数 它会返回类 Dlist 的结果 以实现良好的打印效果 事实上有一个print Dlist类的方法 还有一个明显相关的format
  • Windows Phone Web 访问 API 中的异步等待

    WP8 中是否支持异步 等待模式 我需要从基于 Web 的 API 获取 XML 它看起来像这样WebClient or WebRequest不支持 WP8 BCL 中是否有支持可用于 Web 访问的 async await 类 如果没有
  • 如何通过 Express 中的中间件链识别请求(通过 ID)。

    我正在使用 Node js 开发一个 RESTful 服务器 使用 Express 作为框架 暂时使用 Winston 作为记录器模块 该服务器将处理大量并发请求 并且能够使用 请求 ID 之类的内容跟踪每个特定请求的日志条目对我来说非常有
  • 是否能够忽略/禁用 vNext Build 中的第一步“获取源”?

    这是我们的情况 有时我们需要运行 vNext 构建 而不需要从 TFS 服务器提取任何源代码 但我们不想更改工作区映射 有没有简单的相关设置忽略或禁用获取源步骤在构建定义中 与任何其他任务不同 获取来源 创建新的构建定义时自动添加的任务 无
  • 可以使用构造函数克隆方法创建对象

    我一直以为clone 创建一个对象而不调用构造函数 但是 在阅读 Effective Java 时第 11 项 明智地覆盖克隆 我发现一个声明说 不调用任何构造函数 的规定太强了 A 行为良好的clone方法可以调用构造函数来创建对象 正在
  • 如何有效地找到特定宽度字符串的理想列数?

    I have n strings of different length s1 s2 sn that I want to display on a terminal in c columns The terminal has a width
  • 如何使用 PHP 从图像文件创建 PDF 文档

    使用 PHP 应用程序 我必须从一组图像生成单个 PDF 文档 实现这一目标的最佳方法是什么 我可以使用 TCPDF 库吗 你能给我一些例子吗 最简单的方法是使用 TCPDF http www tcpdf org 并将图像设置为完整背景 如
  • 控制 x 刻度日期值

    我有以下数据样本作为 x y 对 x 和 y 都是 Unix 时间戳 1354648326 1354648326 1354649456 1371775551 1354649664 1429649819 1354649667 14296440
  • python numpy 用不同的值填充矩阵对角线

    我看到一个函数numpy fill diagonal它为对角元素分配相同的值 但我想为每个对角元素分配不同的随机值 我怎样才能在 python 中做到这一点 可能正在使用 scipy 或其他库 那docs调用填充val标量是一个现有的文档错
  • 从服务器读取具有一定偏移量的文件

    如何从服务器读取以某个偏移量开头的文件 类似于wget c 我必须向服务器发送哪些标头 服务器必须支持哪些期货 您应该使用Range请求中的标头 但只有当服务器通知您它接受范围请求时 您才可以使用它Accept Ranges响应头 这是一个
  • CSS 表格单元格等宽

    我在表格容器内有不确定数量的表格单元格元素 div style display table div style display table cell div div style display table cell div div 是否有一
  • C++包含头文件问题

    我是 c c 新手 我对以下内容感到困惑 我是否应该将类声明放在自己的头文件中 并将实际实现放在另一个文件中 我是否应该放置标题
  • 如何抑制列表属性的 XML 标记

    序列化时是否可以避免列表属性标签 Serializable removed unnecessary public class Foo protected List
  • 更改选定段控件的颜色

    在我的应用程序中 我能够更改所选段控件的颜色 但是颜色会针对另一个索引而不是所选索引进行更改 我可以在索引中找到任何错误 Help me 我的代码如下 if SegmentRound selectedSegmentIndex 0 UICol
  • 指定通用参数的构造函数约束[重复]

    这个问题在这里已经有答案了 我有一个对象集合 我将其作为参数传递以创建另一种类型的对象 一对一 我在很多地方都这样做 基本上是从数据对象转换为业务对象 我想编写一个通用扩展方法来完成此任务 但我陷入困境 因为我不知道如何指定业务对象具有以数
  • 在 OS X 上安装 h5py

    我花了一天的时间试图得到h5pypython 模块工作 但没有成功 我已经安装了 HDF5 共享库 并按照我在网上找到的说明进行操作以使其正确 但它不起作用 下面是我尝试将模块导入 python 时收到的错误消息 我也尝试通过 MacPor
  • jqXHR - http-status-code-403(但状态代码为0)

    我得到状态代码 0 但它是代码 403 有人能告诉我问题是什么吗 JQUERY var jqxhr ajax url http gdata youtube com feeds api users bernd favorites alt js
  • IE9数组不支持indexOf

    基于http ie microsoft com testdrive HTML5 ECMAScript5Array Default html 我认为 IE9 支持数组中的 indexOf 但以下中断 知道为什么吗 错误信息如下 SCRIPT4
  • Laravel phpunit 没有获得正确的 url

    我已将 app url 配置值更改为正确的 url http testing local 用于本地测试 但是当我运行 phpunit 测试并尝试调用 时 它正在尝试查询http localhost而不是 app url 的值 我需要做什么才
  • 如何使用Chart.js显示折线图数据集点标签?

    我的设计要求是显示包含 5 个趋势数据集的折线图 沿着笔画线的每个数据值需要在其各自的数据点处显示数据值标签 不幸的是 我在 Charts js 中找不到满足此要求的选项 有解决方法可以帮助我吗 我也在小提琴上发布了这个 http jsfi