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

JBMcClure

我有一个设计要求,要显示带有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);
JBMcClure

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

我意识到我可以访问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(){}

我发现我必须使用onAnimationCompletewith,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/

谢谢大家!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Chart.js-如何将折线图数据集设置为在加载时禁用

来自分类Dev

如何使用 Echarts (JS) 为折线图的每个点显示工具提示

来自分类Dev

如何使用图例和标签显示给定数据的折线图?

来自分类Dev

Chart.js在折线图上绘制两个json数据集

来自分类Dev

Chart.js在折线图上绘制两个json数据集

来自分类Dev

增加chart.js中折线图的标签大小

来自分类Dev

如何摆脱折线图上每个点顶部的折线(Chart.js)

来自分类Dev

如何在Oxyplot中显示折线图的绘图点?

来自分类Dev

如何在折线图上隐藏和显示点

来自分类Dev

如何通过遍历JavaScript中的字典在chart.js的折线图中添加新的数据集?

来自分类Dev

如何显示Google图表(折线图)信息(标签)?

来自分类Dev

Chart.js折线图未显示

来自分类Dev

D3.js:使用长格式数据在多系列折线图中的现有折线上绘制点

来自分类Dev

Chart.js - 折线图最右边的数据点

来自分类Dev

如何在highChart.js折线图中的Y轴上的标签中显示最后一个数据点值

来自分类Dev

使用动态数据显示绘制折线图?

来自分类Dev

如何在Chart.js折线图上自定义y轴标签?

来自分类Dev

使用Chart.js更改折线图的标签字体颜色

来自分类Dev

如何从MVC控制器显示Chart.js折线图

来自分类Dev

Chart.js-使用addData()的折线图显示是否有错误?

来自分类Dev

D3.js:使用长格式数据在多系列折线图中的现有线上绘制点

来自分类Dev

使用chart.js将数据添加到折线图

来自分类Dev

如何使用C#在折线图中显示标记点

来自分类Dev

如何将Chart.js折线图与车把一起使用?

来自分类Dev

在chart.js中绘制折线图,仅在值更改时才放置点

来自分类Dev

折线图chart.js上有两个不同的x轴标签

来自分类Dev

具有正确间隔 x 标签的 Chart.js 折线图

来自分类Dev

如何在折线图中显示其他点信息?

来自分类Dev

如何以编程方式使折线图点处于活动状态/突出显示

Related 相关文章

  1. 1

    Chart.js-如何将折线图数据集设置为在加载时禁用

  2. 2

    如何使用 Echarts (JS) 为折线图的每个点显示工具提示

  3. 3

    如何使用图例和标签显示给定数据的折线图?

  4. 4

    Chart.js在折线图上绘制两个json数据集

  5. 5

    Chart.js在折线图上绘制两个json数据集

  6. 6

    增加chart.js中折线图的标签大小

  7. 7

    如何摆脱折线图上每个点顶部的折线(Chart.js)

  8. 8

    如何在Oxyplot中显示折线图的绘图点?

  9. 9

    如何在折线图上隐藏和显示点

  10. 10

    如何通过遍历JavaScript中的字典在chart.js的折线图中添加新的数据集?

  11. 11

    如何显示Google图表(折线图)信息(标签)?

  12. 12

    Chart.js折线图未显示

  13. 13

    D3.js:使用长格式数据在多系列折线图中的现有折线上绘制点

  14. 14

    Chart.js - 折线图最右边的数据点

  15. 15

    如何在highChart.js折线图中的Y轴上的标签中显示最后一个数据点值

  16. 16

    使用动态数据显示绘制折线图?

  17. 17

    如何在Chart.js折线图上自定义y轴标签?

  18. 18

    使用Chart.js更改折线图的标签字体颜色

  19. 19

    如何从MVC控制器显示Chart.js折线图

  20. 20

    Chart.js-使用addData()的折线图显示是否有错误?

  21. 21

    D3.js:使用长格式数据在多系列折线图中的现有线上绘制点

  22. 22

    使用chart.js将数据添加到折线图

  23. 23

    如何使用C#在折线图中显示标记点

  24. 24

    如何将Chart.js折线图与车把一起使用?

  25. 25

    在chart.js中绘制折线图,仅在值更改时才放置点

  26. 26

    折线图chart.js上有两个不同的x轴标签

  27. 27

    具有正确间隔 x 标签的 Chart.js 折线图

  28. 28

    如何在折线图中显示其他点信息?

  29. 29

    如何以编程方式使折线图点处于活动状态/突出显示

热门标签

归档