2017-03-10 97 views

回答

1

chart.js之没有选择切下一块会是这样。但你总是可以define your own chart type

这里我将pie图表转化为cutOutPie类型。图表类使用updateElement函数配置“饼图切片”,因此我覆盖它并移动元素的位置。详细信息可以通过reading the source找到。

Chart.defaults.cutOutPie = Chart.helpers.clone(Chart.defaults.pie); 
 

 
Chart.controllers.cutOutPie = Chart.controllers.pie.extend({ 
 
    updateElement: function(arc, index, reset) { 
 
     Chart.controllers.pie.prototype.updateElement.call(this, arc, index, reset); 
 
     var displacement = this.getDataset().displacements[index]||0; 
 
     var model = arc._model; 
 
     var angle = model.startAngle + model.circumference/2; 
 
     model.x += Math.cos(angle) * displacement; 
 
     model.y += Math.sin(angle) * displacement; 
 
    } 
 
}); 
 

 
new Chart('chart', { 
 
    type: 'cutOutPie', 
 
    data: { 
 
     labels: ['a', 'b', 'c', 'd', 'e', 'f'], 
 
     datasets: [{ 
 
      data: [1, 7, 2, 8, 3, 9], 
 
      backgroundColor: ['red', 'orange', 'green', 'gold', 'pink', 'blue'], 
 
      displacements: [0, 0, 40, 0, 0, 16], 
 
     }], 
 
    }, 
 
});
<script src="//cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script> 
 
<canvas id="chart" width="400" height="300"></canvas>

+0

谢谢!我实际上正在玩Javascript,很容易找出破解的方法。但是,感谢您给出一个完美的例子,展示如何做到干净! – joakimk

+0

它的效果很好,除了一件事情:偏移的饼图片段落在图表区域之外,所以它们被裁剪掉。要么扩大区域以腾出空间(给出最大的位移),要么必须类似地减小馅饼的半径。我认为或者会有相同的结果,视觉?我尝试在'updateElement'中减少'this.chart.outerRadius'等,但没有任何变化。 – joakimk

+1

您可以尝试['Chart.defaults.global.layout = {padding:100}'](http://www.chartjs.org/docs/#chart-configuration-layout-configuration)作为快速解决方法,但是将减少整个图表的大小。 – kennytm