Google Chart,如何在列顶部移动注释

时间:2015-06-04 06:29:42

标签: annotations google-visualization stacked-chart

我使用Google Chart的堆积柱形图,我想要实现的是在每列的顶部显示总数,并且我使用注释为此。当您查看图像时,不知何故只有第5列(1,307.20)上的注释按预期工作。

enter image description here

正如我调查的那样,这似乎是谷歌图表的一个错误,这个错误可以解释如下

[[Date, Car, Motobike, {role: :annotation}],
[June 2015, 500, 0, 500],
[Feb 2015, 500, 600, 1100]]
[March 2015, 700, 0, 700],

使用上面的数据,2015年2月的注释是唯一正确显示的注释,其他2个没有,因为当时的最后一个值是0,当我将最后一个值更改为1,6月和3月时,注释显示正确。

然后我想到一个解决方法是始终显示"非零"数据在顶部,结果如下:

enter image description here

注释正确地移动到顶部,但正如您所看到的,它位于列中,我想要实现的是将其移动到列的顶部。

我已经坚持了一段时间,谷歌文档对这个案例没有多大帮助。任何帮助都将受到高度赞赏

3 个答案:

答案 0 :(得分:6)

我遇到了同样的问题,我的一些系列中有0作为我的最后一个值,所以标签会显示在X轴而不是顶部。对于动态数据,确保最后一个值永远不是0将是一个真正的挑战。@ dlaliberte给了我一个提示从哪里开始这个评论:

  

“作为一种解决方法,您可以考虑使用额外的ComboChart   系列在每个列堆栈的顶部绘制一个点。你必须这样做   自己计算其他系列的总数,以了解放在哪里   每一点。“

我从谷歌的画廊找到了一个组合图表并打开了jsfiddle,看看我能做些什么。我大部分都留下了数据,但更改了系列名称标签,使数字更简单一些。不要陷入数据无关的图表的目的,我只是想弄清楚即使最后一列是0(https://jsfiddle.net/L5wc8rcp/1/),如何将我的注释放到图的顶部:< / p>

function drawVisualization() {
    // Some raw data (not necessarily accurate)
    var data = google.visualization.arrayToDataTable([
        ['Month', 'Bolivia', 'Ecuador', 'Madagascar', 'Papua New Guinea', 'Rwanda', 'Total', {type: 'number', role: 'annotation'}],
        ['Application', 5, 2, 2, 8, 0, 17, 17],
        ['Friend', 4, 3, 5, 6, 2, 20, 20],
        ['Newspaper', 6, 1, 0, 2, 0, 9, 9],
        ['Radio', 8, 0, 8, 1, 1, 18, 18],
        ['No Referral', 2, 2, 3, 0, 6, 13, 13]
    ]);

    var options = {
        isStacked: true,
        title : 'Monthly Coffee Production by Country',
        vAxis: {title: 'Cups'},
        hAxis: {title: 'Month'},
        seriesType: 'bars',
        series: {5: {type: 'line'}},
    };

    var chart = new google.visualization.ComboChart(document.getElementById('chart_div'));
    chart.draw(data, options);
}

这产生了这个图,这是一个很好的开始:

enter image description here

正如你所看到的,因为系列5(我们的其他系列的总和)是type: 'line',所以它总是指向堆栈的顶部。现在,我不一定想要在我的图表中使用该行,因为它不用于比较连续的水平总计,因此我使用lineWidth: 0更新了系列5,然后将该类别的标题设为''以便它不会作为堆栈包含在图例中(https://jsfiddle.net/Lpgty7rq/):

function drawVisualization() {
    // Some raw data (not necessarily accurate)
    var data = google.visualization.arrayToDataTable([
        ['Month', 'Bolivia', 'Ecuador', 'Madagascar', 'Papua New Guinea', 'Rwanda', '', {type: 'number', role: 'annotation'}],
        ['Application', 5, 2, 2, 8, 0, 17, 17],
        ['Friend', 4, 3, 5, 6, 2, 20, 20],
        ['Newspaper', 6, 1, 0, 2, 0, 9, 9],
        ['Radio', 8, 0, 8, 1, 1, 18, 18],
        ['No Referral', 2, 2, 3, 0, 6, 13, 13]
    ]);

    var options = {
        isStacked: true,
        title : 'Monthly Coffee Production by Country',
        vAxis: {title: 'Cups'},
        hAxis: {title: 'Month'},
        seriesType: 'bars',
        series: {5: {type: 'line', lineWidth: 0}}, 
    };

   var chart = new google.visualization.ComboChart(document.getElementById('chart_div'));
   chart.draw(data, options);
}

和Voila!

enter image description here

答案 1 :(得分:3)

您需要使用annotations.alwaysOutside选项:

  

annotations.alwaysOutside - 在条形图和柱形图中,如果设置为true,   在条形图/列之外绘制所有注释。

请参阅https://google-developers.appspot.com/chart/interactive/docs/gallery/columnchart

但是,对于堆叠图表,注释当前始终强制位于列内。这将在下一个主要版本中修复。

作为一种解决方法,您可以考虑使用带有额外系列的ComboChart在每个列堆栈的顶部绘制一个点。您必须自己计算其他系列的总数,以了解每个点的位置。然后使pointSize为0,并在此系列之后添加注释列。

答案 2 :(得分:0)

使用 ArrayList<People> list = new ArrayList(mRealm.where(People.class).findAll());

alwaysOutside: true