¿Cómo puedo mostrar un subconjunto de datos en piezas circulares en Chart.JS mientras sigo mostrando el superconjunto al pasar el mouse por encima?

Tengo un gráfico circular que se ve así cuando se cierne sobre un pedazo de pastel:

Excepto por querer la leyendaa la derecha en lugar de arriba, Estoy bastante contento con esto, pero solo quiero que el valor porcentual se muestre "todo el tiempo" en los pedazos de pastel, y aún tenga el<name> (<%val>): <data> se muestra al pasar el mouse.

En otras palabras, quiero que el pastel se vea así:

¿Cómo puedo separar ese dato (el porcentaje) y dibujarlo en cada pedazo de pastel?

Aquí está el código que estoy usando hasta ahora:

var formatter = new Intl.NumberFormat("en-US");
var data = {
    labels: [
        "Bananas (18%)",
        "Lettuce, Romaine (14%)",
        "Melons, Watermelon (10%)",
        "Pineapple (10%)",
        "Berries (10%)",
        "Lettuce, Spring Mix (9%)",
        "Broccoli (8%)",
        "Melons, Honeydew (7%)",
        "Grapes (7%)",
        "Melons, Cantaloupe (7%)"
    ],
    datasets: [
        {
            data: [2755, 2256, 1637, 1608, 1603, 1433, 1207, 1076, 1056, 1048],
            backgroundColor: [
                "#FFE135",
                "#3B5323",
                "#fc6c85",
                "#ffec89",
                "#021c3d",
                "#3B5323",
                "#046b00",
                "#cef45a",
                "#421C52",
                "#FEA620"
            ]
        }
    ]
};

var optionsPie = {
    responsive: true,
    scaleBeginAtZero: true,
    tooltips: {
        callbacks: {
            label: function (tooltipItem, data) {
                return data.labels[tooltipItem.index] + ": " +
                    formatter.format(data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index]);
            }
        }
    }
};

var ctx = $("#top10ItemsChart").get(0).getContext("2d");
var top10PieChart = new Chart(ctx,
{
    type: 'pie',
    data: data,
    options: optionsPie
});

$("#top10Legend").html(top10PieChart.generateLegend());

¿Necesito agregar un evento afterDraw () y, de ser así, ¿cómo debe verse para lograr esto?

ACTUALIZAR

Intenté agregar una devolución de llamada onAnimationComplete () al constructor de gráficos:

var top10PieChart = new Chart(ctx,
{
    type: 'pie',
    data: data,
    options: optionsPie,
    onAnimationComplete: function () {
        var ctx = this.chart.ctx;
        ctx.font = this.scale.font;
        ctx.fillStyle = this.scale.textColor;
        ctx.textAlign = "center";
        ctx.textBaseline = "center";

        this.datasets.forEach(function(dataset) {
            dataset.points.forEach(function(points) {
                ctx.fillText(points.value, points.x, points.y - 10);
            });
        });
    }
});

... pero no hace nada.

ACTUALIZACIÓN 2

También intenté agregar lo siguiente al objeto de opciones:

,
tooltipTemplate: "<%= value %>",
onAnimationComplete: function () {
    this.showTooltip(this.datasets[0].bars, true);
}

... con los mismos resultados (sin cambios).

ACTUALIZACIÓN 3

De acuerdo, tenía la esperanza de que la respuestaaquí funcionaría, y terminé con este nuevo código para mi gráfico circular basado en la respuesta allí:

Añadido a las opciones Pie:

showTooltips: false,
onAnimationProgress: drawSegmentValues

Agregado después de recuperar la referencia al elemento:

var midX = canvas.width / 2;
var midY = canvas.height / 2

Agregado después de que se construya la instancia del gráfico circular:

var radius = top10PieChart.outerRadius;

Función añadida drawSegmentValues ()

En contexto (sin juego de palabras):

        // Top 10 Pie Chart
        var formatter = new Intl.NumberFormat("en-US");
        var data = {
            labels: [
                "Bananas (18%)",
                "Lettuce, Romaine (14%)",
                "Melons, Watermelon (10%)",
                "Pineapple (10%)",
                "Berries (10%)",
                "Lettuce, Spring Mix (9%)",
                "Broccoli (8%)",
                "Melons, Honeydew (7%)",
                "Grapes (7%)",
                "Melons, Cantaloupe (7%)"
            ],
            datasets: [
                {
                    data: [2755, 2256, 1637, 1608, 1603, 1433, 1207, 1076
1056, 1048],
                    backgroundColor: [
                        "#FFE135",
                        "#3B5323",
                        "#fc6c85",
                        "#ffec89",
                        "#021c3d",
                        "#3B5323",
                        "#046b00",
                        "#cef45a",
                        "#421C52",
                        "#FEA620"
                    ]
                }
            ]
        };

        var optionsPie = {
            responsive: true,
            scaleBeginAtZero: true,
            legend: {
                display: false
            },
            tooltips: {
                callbacks: {
                    label: function (tooltipItem, data) {
                        return data.labels[tooltipItem.index] + ": " +
                         formatter.format
data.datasets[tooltipItem.datasetIndex].data[
tooltipItem.index]);
                    }
                }
            },
            showTooltips: false,
            onAnimationProgress: drawSegmentValues
        };

        var ctx = $("#top10ItemsChart").get(0).getContext("2d");
        var midX = canvas.width / 2;
        var midY = canvas.height / 2
     ,   var top10PieChart = new Chart(ctx,
        {
            type: 'pie',
            data: data,
            options: optionsPie//,
        });
        var radius = top10PieChart.outerRadius;

        $("#top10Legend").html(top10PieChart.generateLegend());
        // </ Top 10 Pie Chart

        // Price Compliance Bar Chart
        . . . this horizontal bar chart code elided for brevity, bu
unchanged from their working state
        // Forecast/Impact Analysis Bar chart
        . . . this horizontal bar chart code also elided for brevity, bu
unchanged from their working state

    function drawSegmentValues() {
        for (var i = 0; i < top10PieChart.segments.length; i++) {
            ctx.fillStyle = "white";
            var textSize = canvas.width / 10;
            ctx.font = textSize + "px Verdana";
            // Get needed variables
            var value = top10PieChart.segments[i].value;
            var startAngle = top10PieChart.segments[i].startAngle;
            var endAngle = top10PieChart.segments[i].endAngle;
            var middleAngle = startAngle + ((endAngle - startAngle)
2);

            // Compute text location
            var posX = (radius / 2) * Math.cos(middleAngle) + midX;
            var posY = (radius / 2) * Math.sin(middleAngle) + midY;

            // Text offside by middle
            var w_offset = ctx.measureText(value).width / 2;
            var h_offset = textSize / 4;

            ctx.fillText(value, posX - w_offset, posY + h_offset);
        }
    }

... pero manguera completamente los tres gráficos, sin dejar nada visible / dibujo.

ACTUALIZACIÓN 4

Por cierto, probé la respuesta dada, pero sin ningún resultado / cambio: todavía muestra datos al pasar el mouse, como se diseñó, pero de lo contrario no hay nada.

Además, el violín relacionado muestra tanto el valor como el porcentaje; debido a restricciones de bienes raíces, quiero que el porcentaje solo esté "siempre activado": la "enchilada completa" solo se debe ver al pasar el ratón.

Respuestas a la pregunta(2)

Su respuesta a la pregunta