【问题标题】:How to bind json array data to chart.js with same canvas id?如何将 json 数组数据绑定到具有相同画布 ID 的 chart.js?
【发布时间】:2017-08-09 02:33:57
【问题描述】:

我的 HTML 画布如下所示:

<div>
    <canvas id="chartdiv" width="200" height="200"></canvas>
</div>

下面是json数据,

[{
    "SID": "1",
    "NAME": "niten",
    "FTEPERCENT": "71.29",
    "FTCPERCENT": "28.71"
}, {
    "SID": "2",
    "NAME": "jiten",
    "FTEPERCENT": "82.08",
    "FTCPERCENT": "17.92"
}]

下面是输入代码:

window.onload = function() {
    $.ajax({
        type: "POST",
        url: "ViewDirectManagersOverviewDetails.aspx/GetEmployeeOverviewDetailsForDirectManagers",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(Result) {
            debugger;
            Result = JSON.parse(Result.d);
            var newctx1;
            for (var i = 0; i < Result.length; i++) {

                var data1 = parseFloat(Result[i].FTEPERCENT);
                var data2 = parseFloat(Result[i].FTCPERCENT);
                var tempData = {
                    labels: ["FTE", "FTC"],
                    datasets: [{
                        data: [data1, data2],
                        backgroundColor: [
                            "#FF6384",
                            "#36A2EB"
                        ],
                        hoverBackgroundColor: [
                            "#FF6384",
                            "#36A2EB"
                        ],
                        borderWidth: 5
                    }]
                };
                // For a pie chart1
                var ctx = document.getElementById("chartdiv").getContext("2d");
                var myLineChart = new Chart(ctx, {
                    type: "pie",
                    data: tempData,
                    options: options,
                    title: {
                        display: true,
                        text: 'Employee Overview',
                        fontStyle: 'bold',
                        fontSize: 20
                    }
                });
            }
            $('chartdiv').append(newctx1);
        }
    });
};

上面的代码是在相同的画布ID上绘制饼图,但我想绘制分隔饼图,因为json有两个数组对象,但画布ID应该相同。

通过 json 循环将给出两个单独的对象,所以我必须在表中绘制两个单独的饼图,就像我们在数据表中显示数据的方式一样,需要在表格行中显示饼图。

【问题讨论】:

    标签: javascript asp.net arrays json chart.js


    【解决方案1】:

    很遗憾,无法在单个画布中呈现多个图表。 Chart.js 绑定到整个画布对象,并使用整个画布来呈现单个图表。

    如果您想查看两个单独的饼图,则需要两个单独的画布元素。但是,如果适合您的需要,您当然可以将多个数据集添加到单个图表中。对于饼图,它将在较大的饼图中嵌入较小的饼图。

    这是一个示例配置,展示了如何在单个饼图中设置多个数据集。

    var ctx = document.getElementById("chart-area").getContext("2d");
    var myPie = new Chart(ctx, {
      type: 'pie',
      data: {
            labels: ["FTE", "FTC"],
        datasets: [{
          label: 'Dataset 1',
          data: data1,
          backgroundColor: [
            "#FF6384",
            "#36A2EB"
          ],
          hoverBackgroundColor: [
            "#FF6384",
            "#36A2EB"
          ],
          borderWidth: 5,
        }, {
          label: 'Dataset 2',
          data: data2,
          backgroundColor: [
            "#FF6384",
            "#36A2EB"
          ],
          hoverBackgroundColor: [
            "#FF6384",
            "#36A2EB"
          ],
          borderWidth: 5,
        }],
      },
      options: {
        title: {
          display: true,
          text: 'Employee Overview',
          fontStyle: 'bold',
          fontSize: 20
        }
      }
    });
    

    这是一个codepen example 来证明这一点。

    【讨论】:

    • 有没有其他开源免费的饼图可以实现这一点?
    • 不是在画布中呈现多个的。你为什么需要这个?为什么不使用 2 个不同的画布元素创建 2 个图表?
    • 基本上,我正在获取包含 SID 及其相关数据的多行数据表。我已经使用 html 表来渲染那些遍历行的数据,并在同一个表中多次显示不同 sid 的图表。希望你能理解!!!
    • 为什么不在每个表格行(&lt;td&gt; 内)中放置一个不同的 &lt;canvas&gt; 元素(具有唯一的 id)?
    • 我正在生成不同的 canvas elemnet id,例如 "var series = new Array(_tempCanvas.push($('', { id: i, width: 1, height: 1 }) ));"但是如何放入每个表格行列是我卡住的地方。你能帮我写下那个逻辑吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 2014-07-22
    • 2015-03-09
    • 1970-01-01
    • 2015-03-20
    • 2014-10-08
    相关资源
    最近更新 更多