繁体   English   中英

每个数据集带有不同标签的 Chart.js 折线图

[英]Chart.js Line-Chart with different Labels for each Dataset

使用Chart.js您可以创建折线图,为此您必须保护标签和数据集。 例如:

var data = {
    labels: ["January", "February", "March", "April", "May", "June", "July"],
    datasets: [
        {
            label: "My First dataset",
            fill: false,
            lineTension: 0.1,
            backgroundColor: "rgba(75,192,192,0.4)",
            borderColor: "rgba(75,192,192,1)",
            borderCapStyle: 'butt',
            borderDash: [],
            borderDashOffset: 0.0,
            borderJoinStyle: 'miter',
            pointBorderColor: "rgba(75,192,192,1)",
            pointBackgroundColor: "#fff",
            pointBorderWidth: 1,
            pointHoverRadius: 5,
            pointHoverBackgroundColor: "rgba(75,192,192,1)",
            pointHoverBorderColor: "rgba(220,220,220,1)",
            pointHoverBorderWidth: 2,
            pointRadius: 1,
            pointHitRadius: 10,
            data: [65, 59, 80, 81, 56, 55, 40],
        }
    ]
};

这里的问题是您有固定数量的标签(在这种情况下为 7),并且您还需要为每个数据集提供 7 个数据条目。 现在,如果您有未知数量的标签和数据条目怎么办?

如果一个数据条目包含一个数字和一个时间怎么办:

Entry {
    number: 127
    time: 10:00
}

如果要显示 X 轴上的所有时间和 Y 轴上按 X 轴上的时间排序的所有数字,该怎么办? Chart.js 可以实现吗?

我今天也和这个战斗了。 您需要更具体地了解您的数据集。 在折线图中,“数据集”是一个数组,数组的每个元素代表图表上的一条线。 一旦你解决了,Chart.js 实际上在这里非常灵活。 您可以将一条线(数据集元素)连接到 x 轴和/或 y 轴,您可以详细指定每个轴。

在您的情况下,如果我们坚持图表上的单条线,并且您希望条目的“时间”部分位于底部(x 轴),那么您所有的时间都可以进入“标签”数组和您的“数字”将精确定位在 y 轴上。 为了保持简单而不用指定我们自己的 x 和 y 轴的比例并给出以下数据:

var MyData = [{time:"10:00", number: "127"},
              {time:"11:00", number: "140"},
              {time:"12:00", number: "135"},
              {time:"13:00", number: "122"}];

您可以将图表的“数据”属性设置为:

var data = {
    labels: ["10:00", "11:00", "12:00", "13:00"],
    datasets: [
        {
            label: "My First dataset",

            // Insert styling, colors etc here

            data: [{x: "10:00", y: 127},
                   {x: "11:00", y: 140},
                   {x: "12:00", y: 135},
                   {x: "13:00", y: 122}]
        }
    ]};

请注意,数据数组现在更加具体,数据的每个元素都通过引用其中一个标签而不是原始数字将其自身绘制在 x 轴上。 您现在可以按照此模式将另一个数据集对象放入数据集数组中,并有两行,显然为您的行提供不同的颜色和名称(“标签”)。

希望这会有所帮助。

我在这里找到了一个非常好的解决方案: https : //github.com/chartjs/Chart.js/issues/3953

基本上,您可以将自己的“标签”属性添加到每个数据集,并在 xAxes 标签、工具提示或任何您喜欢的回调中利用它。

var ctx = $("#myChart");
var myChart = new Chart(ctx, {
    type: 'doughnut',
    data: {
        datasets: [{
            data: [1, 2, 3, 4, 5],
            backgroundColor: [
                'green',
                'yellow',
                'red',
                'purple',
                'blue',
            ],
            labels: [
                'green',
                'yellow',
                'red',
                'purple',
                'blue',
            ]
        }, {
            data: [6, 7, 8],
            backgroundColor: [
                'black',
                'grey',
                'lightgrey'
            ],
            labels: [
                'black',
                'grey',
                'lightgrey'
            ],
        },]
    },
    options: {
        responsive: true,
        legend: {
            display: false,
        },
        tooltips: {
            callbacks: {
                label: function(tooltipItem, data) {
                    var dataset = data.datasets[tooltipItem.datasetIndex];
                    var index = tooltipItem.index;
                    return dataset.labels[index] + ': ' + dataset.data[index];
                }
            }
        }
    }
});

这里重要的是这一段:

        tooltips: {
            callbacks: {
                label: function(tooltipItem, data) {
                    var dataset = data.datasets[tooltipItem.datasetIndex];
                    var index = tooltipItem.index;
                    return dataset.labels[index] + ': ' + dataset.data[index];
                }
            }
        }

由于您的帖子中有很多问题,我将尝试至少帮助解决其中的一些问题。 对于带有数字和时间的 Entry 模型,您应该创建一个散点图。 在这里,您使用 x 和 y 值定义数据对象,如下面的示例所示。 它要求每个条目 x 都有一个对应的 y。 看看散点图。 http://www.chartjs.org/docs/#line-chart-scatter-line-charts

var d = new Date();
var scatterChart = new Chart(ctx, {
    type: 'line',
    data: {
        datasets: [{
            label: 'Scatter Dataset',
            data: [{
                x: new Date().setDate(d.getDate()-5),
                y: 0
            }, {
                x: new Date(),
                y: 10
            }, {
                x: new Date().setDate(d.getDate()5),
                y: 5
            }]
        }]
    },
    options: {
        scales: {
            xAxes: [{
                    type: "time",
                    time: {
                        format: "HH:mm",
                        unit: 'hour',
                        unitStepSize: 2,
                        displayFormats: {
                            'minute': 'HH:mm', 
                            'hour': 'HH:mm'
                        },
                        tooltipFormat: 'HH:mm'
                    },
                    gridLines: {
                        display: false
                    }
                }],
        }
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM