<!-- include in your body -->
<canvas id="bar_cart" width="800" height="350"></canvas>
<div id="cart_data">
<!-- chart headline -->
<h1>Top-Selling Car Manufacturers in Germany in 2010</h1>
<!-- chart headline end-->
<!-- list of bar-chart data -->
<!-- every <li> represents a bar in the chart -->
<ul>
<li>
<!-- data-value represents a number in your chart-->
<!-- data-unit represents the unit in if the given number-->
<!-- data-color represents the color of this bar in the chart-->
<p data-name="Volkswagen" data-value="613808" data-unit="Sales" data-color="#ff0000">Volkswagen - 613808 Sales</p>
</li>
<li>
<p data-name="Mercedes" data-value="281240" data-unit="Sales" data-color="#ffff00">Mercedes - 281240 Sales</p>
</li>
<li>
<p data-name="BMW/Mini" data-value="266729" data-unit="Sales" data-color="#00ff00">BMW/Mini - 266729 Sales</p>
</li>
<li>
<p data-name="Opel" data-value="233498" data-unit="Sales" data-color="#00ffff">Opel - 233498 Sales</p>
</li>
<li>
<p data-name="Audi" data-value="226872" data-unit="Sales" data-color="#0080ff">Audi - 226872 Sales</p>
</li>
<li>
<p data-name="Ford" data-value="198156" data-unit="Sales" data-color="#8000ff">Ford - 198156 Sales</p>
</li>
</ul>
<!-- list of bar-chart data end-->
</div>
JavaScript
var drawBarCart = function() {
/* options (fold) */
var textColor = "rgb(0,0,0)";
/* options (end) */
/* get some data from html (fold) */
var height;
var width;
$("canvas").each(function(i){
width = $(this).attr("width");
height = $(this).attr("height");
});
var title = $('#cart_data h1').text();
var values = $("#cart_data>ul>li>p[data-value]").map(function(){
return parseInt($(this).attr("data-value"));
});
/* get some data from html (end) */
/* drawing values (fold) */
var yMargin = 25; //margin on top and bottom
var xMargin = 10; //margin left and right and beetween bars
var barMaxHeight = height - yMargin * 2; //maximum bar height depending on canvas height
var barWidth = (width - (values.length + 2) * xMargin) / values.length; //width of bar depending on canvas width
var yBarStartPoint = height - yMargin; //position where the bars start
var yLabelStartPoint = yBarStartPoint + 5; //middle of each bar for
if (barWidth < 100){
headLineFont = '14px sans-serif'
labelFont = '12px sans-serif';
barLabelFont = '10px sans-serif'
} else {
headLineFont = '18px sans-serif'
labelFont = '14px sans-serif';
barLabelFont = '12px sans-serif'
};
/* drawing values (end) */
/* calculate some intermediary values (fold) */
var xMiddleOfDiagram = (xMargin + xMargin * values.length + barWidth * values.length)/2
var biggestValue = values.sort()[values.length-1];
/* calculate some intermediary values (end) */
var context = canvas.getContext('2d');
/* draw headline (fold) */
context.fillStyle = textColor;
context.font = headLineFont; context.textBaseline = 'top'; context.textAlign = 'center'; context.fillText(title, xMiddleOfDiagram, 0);
/* draw headline (end) */
/* add shadow for chart and labels (fold) */
context.shadowOffsetX = 3;
context.shadowOffsetY = 3;
context.shadowBlur = 10;
context.shadowColor = "rgba(64, 64, 64, 0.5)";
/* add shadow for chart and labels (end) */
/* iterate over values...
Please Whitelist JSFiddle in your content blocker.
Help keep JSFiddle free for always by one of two ways:
Whitelist JSFiddle in your content blocker (two clicks)
Go PRO and get access to additional PRO features →
Join the 4+ million users, and keep the JSFiddle dream alive.
Ad-free
All ads in the editor and listing pages are turned completely off.
Use pre-released features
You get to try and use features (like the Palette Color Generator) months before everyone else.
Fiddle collections
Sort and categorize your Fiddles into multiple collections.
Private collections and fiddles
You can make as many Private Fiddles, and Private Collections as you wish!
Console
Debug your Fiddle with a minimal built-in JavaScript console.