Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Chart.js pie tooltip getting cut

I'm using Chart.js pie chart with tooltips which being cut for some reason.

Screenshot attached, didn't found any attribute/option to take care of it..

Is there anyway to take care of it?Tooltip being cut

Thanks!

like image 857
Idan Gozlan Avatar asked Feb 12 '15 11:02

Idan Gozlan


4 Answers

This improper cutoff was raised as issue#622 in the Github repository for ChartJS.

This was determined to be a bug (evidently this bug hasn't yet been fixed)

https://github.com/nnnick/Chart.js/issues/622

In response to that issue, Robert Turrall has a solution which he says is a good workaround. Here is his proposed fix:

I'm sure that this is due to the fact that the tooltips are generated within the confines of the canvas, making it difficult to fix.

I had the same issue on my doughnut chart and solved it by implementing custom tooltips as per the example on the samples folder - worked in conjunction with my existing tooltip fontsize and template settings in the chart initialisation code:

var myDoughnutChart = new Chart(donut).Doughnut(donutdata, {
  tooltipFontSize: 10,
  tooltipTemplate: "<%if (label){%><%=label%>: <%}%><%= value %>hrs",
  percentageInnerCutout : 70
});

Check out samples/pie-customTooltips.html for the custom tooltip code. Copy/paste and it worked straight away. Very happy!

Tooltip displayed well outside the bounds of the canvas:

PS: there's a line chart example too, which I'm guessing will work fine with bar charts.

like image 54
markE Avatar answered Oct 17 '22 04:10

markE


You can add internal padding to the chart. For instance in my case I had a cut of tooltips on the right.

                    options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    cutoutPercentage: 60,
                    legend: {
                        display: false
                    },
                    animation: {
                        animateRotate: false
                    },
                    layout: {
                        padding: {
                            right: 40
                        }
                    }
                }
like image 37
Mike Eshva Avatar answered Oct 17 '22 04:10

Mike Eshva


I found a workaround for this. I have blank labels on my x axis, so I just added a label with several spaces in it for the last label entry. That caused ChartJS to leave enough space for the label to fit, which also leaves enough room for the tooltip to fit.

In addition, I have large circles for my data points and the last one on the right was getting clipped before. Adding the extra space to the label also fixed that.

Here is the code where I create my labels. The ratings is my actual data defined earlier:

// Add blank labels and "Today"
for (i=0; i<ratings.length; i++) {
  labels.push("");
}
labels[ratings.length-1] = "       ";

var data = {
  labels: labels,
  datasets: [
      {
          label: "Progress",
          strokeColor: "rgba(255,165,0,1.0)",
          pointColor: "white",
          pointStrokeColor: "rgba(255,165,0,1.0)",
          pointHighlightStroke: "#B87700",
          data: ratings
      }
  ]
};

Even if you have actual labels on your graph, you could add spaces to your last label to make it bigger. If you are centering your label, you could add the same amount of space before and after.

Obviously there will be limits where this will or won't work for you, but for my case I added 7 spaces and all looks good now.

Also, my case had an issue on the right side, whereas this question has an issue with the left side. The same fix should work, but putting the space on the first label.

like image 3
MindJuice Avatar answered Oct 17 '22 03:10

MindJuice


It seems like Chart.js can't figure out which direction to show the tooltip because it can't detect the size of the tooltip element when it extends beyond the canvas.

In my scenario I fixed it by squeezing the text inside this particular tooltip closer with these options for the tooltip options object:

        tooltips.titleMarginBottom = 1;
        tooltips.bodySpacing = 1;
        tooltips.yPadding = 2;

Wierdly enough Chart.js then correctly decides to show the tooltip to the left of the mouse and not below. Would be cool if you could choose which direction the tooltip appears compared to the mouse.

like image 2
Peheje Avatar answered Oct 17 '22 02:10

Peheje