2017-03-10 4 views

Antwort

1

Chart.js allein hat keine Möglichkeit, ein Stück wie diese zu schneiden. Aber du kannst immer define your own chart type!

Hierunter unterglieder ich die pie Karte in einen cutOutPie Typ. Die Diagrammklasse konfiguriert die "Kuchenscheiben" mit der Funktion updateElement, also überschreibe ich sie und verschiebe die Position der Elemente. Details finden Sie unter 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

Dank! Ich habe tatsächlich mit dem Javascript herumgespielt, es ist glücklicherweise einfach herauszufinden, wo ich hacken kann. Aber danke, dass du ein perfektes Beispiel gegeben hast, wie es sauber gemacht wird! – joakimk

+0

Es funktioniert gut, bis auf eine Sache: Versetzte Tortensegmente fallen außerhalb des Diagrammbereichs, daher werden sie abgeschnitten. Entweder muss der Bereich erweitert werden, um Platz zu schaffen (bei der größten gegebenen Verschiebung), oder der Radius des Kuchens muss ähnlich reduziert werden. Ich nehme an, entweder wird das gleiche Ergebnis, visuell? Ich habe versucht, 'this.chart.outerRadius' usw. innerhalb Ihres' updateElement' zu reduzieren, aber nichts ändert sich. – joakimk

+1

Sie könnten ['Chart.defaults.global.layout = {padding: 100}'] (http://www.chartjs.org/docs/#chart-configuration-layout-configuration) als schnelle Abhilfe verwenden, aber das wird die Größe des gesamten Diagramms reduzieren. – kennytm