分组条形图ChartJS

时间:2015-10-07 11:12:40

标签: javascript jquery json angularjs chart.js

我对使用ChartJs作为JavaScript库非常陌生,我在创建一个读取每个JSON对象的分组条形图时遇到了一些困难,并且在X轴上将它们作为自己的标记放置。

这很难解释,但我想把星期一的JSON对象作为一个例子,我希望在X轴上显示星期一,以及我希望作为分组条形图在图表上显示的所有东西(我想要original_tweet ,图表转发等)。

但是现在它只是重复它。

index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div style="width: 100%; height: 100%;">
    <canvas id="myChart" style="width: 100%; height: auto;"></canvas>
</div>
<div id="js-legend" class="chart-legend"></div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.0.1/Chart.min.js"></script>
<script src="js/chartJsControl.js"></script>
</body>
</html>

chartJsControl.js:

$.getJSON("data.json", function (json) {
    // will generate array with ['Monday', 'Tuesday', 'Wednesday']
    var labels = json.map(function (item) {
        return item.timestamp;
    });
    var tweet = json.map(function (item) {
        return item.original_tweet;
    });
    var data = {
        labels: labels,
        datasets: [{
            label: "My First dataset",
            fillColor: "rgba(220,220,220,0.5)",
            strokeColor: "rgba(220,220,220,0.8)",
            highlightFill: "rgba(220,220,220,0.75)",
            highlightStroke: "rgba(220,220,220,1)",
            data: tweet
        }, {
            label: "My Second dataset",
            fillColor: "rgba(151,187,205,0.5)",
            strokeColor: "rgba(151,187,205,0.8)",
            highlightFill: "rgba(151,187,205,0.75)",
            highlightStroke: "rgba(151,187,205,1)",
            data: tweet
        }]
    };
    var ctx = document.getElementById("myChart").getContext("2d");
    ctx.canvas.width = 1000;
    ctx.canvas.height = 800;
    var myChart = new Chart(ctx).Bar(data);
});

data.json:

[{
    "timestamp": "Monday",
    "original_tweet": "756",
    "retweets": "345",
    "shared": "34",
    "quoted": "14"
}, {
    "timestamp": "Tuesday",
    "original_tweet": "456",
    "retweets": "345",
    "shared": "34",
    "quoted": "14"
}, {
    "timestamp": "Wednesday",
    "original_tweet": "956",
    "retweets": "345",
    "shared": "34",
    "quoted": "14"
}]

屏幕截图:

enter image description here

1 个答案:

答案 0 :(得分:1)

根据您的要求,数据变量中的数据集数组应如下所示:

var data = {
    labels: ['Monday', 'Tuesday', 'Wednesday'],
    datasets: [{
        label: "original_tweet",
        fillColor: "rgba(220,220,220,0.5)",
        strokeColor: "rgba(220,220,220,0.8)",
        highlightFill: "rgba(220,220,220,0.75)",
        highlightStroke: "rgba(220,220,220,1)",
        data: [756,456,956]
    }, {
        label: "retweets",
        fillColor: "rgba(151,187,205,0.5)",
        strokeColor: "rgba(151,187,205,0.8)",
        highlightFill: "rgba(151,187,205,0.75)",
        highlightStroke: "rgba(151,187,205,1)",
        data: [345,345,345]
    }, {
        label: "shared",
        fillColor: "rgba(151,187,205,0.5)",
        strokeColor: "rgba(151,187,205,0.8)",
        highlightFill: "rgba(151,187,205,0.75)",
        highlightStroke: "rgba(151,187,205,1)",
        data: [34,34,34]
    }, {
        label: "quoted",
        fillColor: "rgba(151,187,205,0.5)",
        strokeColor: "rgba(151,187,205,0.8)",
        highlightFill: "rgba(151,187,205,0.75)",
        highlightStroke: "rgba(151,187,205,1)",
        data: [14,14,14]
    }]
};

在数据集中,您必须将要查看的所有选项分类为分组条。在您的情况下 original_tweet,转推,分享,引用

标签将是X轴上的点。如果X轴上的某些点的数据不可用,例如转发数据不适用于'星期一'那么它将在转推的数据数组中为0,如下面的代码所示:

...
}, {
  label: "retweets",
    fillColor: "rgba(151,187,205,0.5)",
    strokeColor: "rgba(151,187,205,0.8)",
    highlightFill: "rgba(151,187,205,0.75)",
    highlightStroke: "rgba(151,187,205,1)",
    data: [0,345,345]
}, {
...