I using flot pie chart for plotting pie charts. but it shows error in firebug that
uncaught exception: Invalid dimensions for plot, width = null, heig
Check these:
You include the jQuery library first and then flot js library
Wrap the whole code within $(document).ready()
handler function.
you bind the flot with correct id
and there is no repeat of same id
.
if your div
is dynamic i.e. appeared to DOM after page load then bind plot()
after
the element appeared to DOM.
I had this same problem too! The answer was not listed above, so here was my problem and solution.
<div id="chart" class="chart" style="width:100%;height:250px;"></div>
Javascript:
<script type="text/javascript">
$(document).ready(function () {
var data = [...];
var options = {...};
$.plot($("#placeholder"), data, options);
});
</script>
So. Notice the plot function. At first, I didn't have the # in the first parameter. That is necessary apparently. It solved my problems.
GG.
I also had the same problem. I set a height and a width to the <div>
tag and it fixed the error.
You can use either inline css (as I did) or JS to set the height and the width. But plot()
function should be called only after we set the height of the <div>
<div class="bars_two" style="height:300px;"></div>
If you put your chart html in div which is given "display: none" class you will get this error. You must put your chart html in div which is given "display:block" class when "jquery.flot.js" is loaded.
<div id="pie_chart" class="chart"> </div>
if this html is in any div which has class="display: none"
when "jquery.flot.js" is loaded, change it to display: block
So, it seems that before you render to a chart, you need to re-fetch the DOM element. Since flot manipulates the elements and inserts its own, it looks like it's replacing the element with its own elements.
In your render, do:
$.plot($(".myChartId || #myChartClass"), myData, myOptions);
This has nothing to do with being in $(document).ready()
, although it is good practice to place it inside of this.
Hope this helps!
I had the same problem integrating template to rails. That's a bad way, but I just comment the line which throws the exception and add 2 lines to set width and height to 0 - it helped me.
Canvas.prototype.resize = function(width, height) {
if (width <= 0 || height <= 0) {
// COMMENTED NEXT LINE
// throw new Error("Invalid dimensions for plot, width = " + width + ", height = " + height);
// NEW LINES ADDED
width = 0;
height = 0;
}
// ... others code
}