2017-06-13 65 views

回答

1

你将需要:

仅显示顶部标签很简单:只要查看当前可见的标签,找到最后:

function showLastLabel() 
{ 
    var shown = chart.data.shown().map(function(item){ return item.id }) // get visible ids: ['data1', 'data2', ...] 
    var last = (shown[shown.length - 1]) 
    d3.select('.c3-chart-texts').selectAll('.c3-target').style('display', 'none') // hide all 
    d3.select('.c3-chart-texts').selectAll('.c3-target-' + last).style('display', 'block') // show last 
} 

重要的是要禁用堆栈重新排序(C3默认情况下做到这一点)因为它违反了上述逻辑。

order: null, 

然后,在计算总顶部标签需要额外的检查能见度:

labels: { 
    format: function(v, id, i, j) 
    { 
     if (isNaN(totals[i])) totals[i] = 0 

     // sum only visible 
     if (chart) 
     { 
      var shown = chart.data.shown().map(function(item){ return item.id }) 
      if (shown.indexOf(id) != -1) totals[i] += v 
     } 
     else 
     { 
      totals[i] += v 
     } 

     return totals[i] 
    } 
}, 

最后的传说物品点击我们更新标签的可见性:

legend: { 
    item: { 
    onclick: function (id) { 
     chart.toggle([id]) // keep default functionality 
     showLastLabel() 
    } 
    } 
}, 

查看完整的例子here

+0

比ks,但它会显示每个颜色的数字,而不是顶部的总数。我需要在每个栏的顶部显示总值。 –

+0

我改正了我的答案,看看。 –

+0

非常感谢..这是预期的答案。当把这段代码放到我的代码中时,我开始知道另外一个问题,比如当我在图表中取消选择组时,计数加两次,比如我有6组(A,B,C,D,E,F ),并在栏中显示6种颜色。如果我选择了A组,那么总数可能应该减少,但它发生了。这会增加计数....如果有其他方法,那对我来说真的很有帮助。 –