Draw ASP.Net Bar Chart Using HTML5 and jQuery

Introduction

In my previous article “Draw ASP.NET Pie Chart Using HTML5 and jQuery http://www.c-sharpcorner.com/UploadFile/asmabegam/draw-pie-chart-in-Asp-Net-using-html5-and-jquery/ I explained how to create a simple Web Pie Chart using HTML5 and jQuery. In this article let's see how to draw our own Bar Chart using HTML5 and jQuery in ASP.NET.

In the source code Zip file you can find both Visual Studio 2010 and Visual Studio 2013 solutions. You can use any solution depending on your Visual Studio version. In the source file I have attached both of my previous Pie Chart samples and the new Bar Chart page.

MY Bar Chart Features



Pie Chart Source Data

The plot data from a database / Data Table / List / XML file or any source depending on your requirements. The only thing you need to do is get the data from your source and bind the result to a Dropdown List. (With the value and text. Here the value will be an integer for plotting the value and the text will be to be displayed in the label.)

Bar Chart Number of Category

Here I have limited the Bar Chart Category display from a minimum of 1 to a maximum of 12. This means here dynamically we can load the plots category depending on the data source. But limited, since the display plots value is within 12 plots. (But the user can redesign the code easily depending on requirements.)

Bar Chart Title Text

The user can add their own Bar Chart Title and dynamically change the titles if required. Here in my example I will draw the Title TextBox text at the bottom of the Bar Chart. (The user can redesign and customize this depending on requirements.)

Bar Chart Water Mark Text

In some cases we need to add our company name as a Water Mark to our Bar Chart. Here in my example I will draw the Water Mark TextBox text at the center of the Bar Chart. (The user can redesign and customize this depending on requirements.)

Bar Chart Company LOGO

The user can add their own company logo to the Bar Chart. (Here for the sample I have added my own image as a log at the top-left corner. (The user can redesign and customize this depending on your requirements if needed.).

Bar Chart Alert Image Display: You can see from the article the first Image has Labels, I have displayed the Bar Chart label Text and Alert Image. If the “Alert On” radio button is checked I will display the Alert Image. If the “Alert Off” radio button is clicked then the Alert Image will not be displayed.

What is the use of an Alert Image?

Let's consider a real project. For example we need to display a Pie Chart for a manufacturing factory with production results Good and Bad. For example if the production result for each quality value is above 300 then we need to display the Alert Green image and if the quality value is below 300 then we need to display the Red image with label bars.

This Alert Image will be easy to identify each quality result as good or bad. (Here for a sample I have used 2 quality check and displayed using Green and Red images but users can customize depending on requirements and add your own image and logic.)

Bar Chart Color Theme

The user can select any one Color Theme for the Bar Chart as Green Theme or Blue Theme.

Save Bar Chart as Image

The user can save the Pie chart as an image.

Here we can see a Bar Chart with another theme with a Blue base but without displaying the Alert Image.


Code Part


Step 1

Click Start program then open Visual Studio 2013 or Visual Studio 2010 (depending on your installed version), select either one. Click "File" -> "New" -> "Project..." then select ASP.NET WEB Project then click Create.

Step 2

Add a new Webform and add a Canvas ELEMENT within the Section Tag.

  1. <SECTION style="border-style: solid; border-width: 2px; width: 1024px;">  
  2.    <CANVAS HEIGHT="740" WIDTH="1024px" ID="canvas">  
  3.       Your browser is not supporting HTML5 Canvas .Upgrade Browser to view this program or check with Chrome or in Firefox.  
  4.    </CANVAS>  
  5. </SECTION>  
Step 3

Inside the JavaScript declare the global variables and initialize the Canvas in JavaScript. In the code I have used comments to easily understand the declarations.

Script Detail Explanations
Script Global variable


Chart Category Color Add

Adding the Pie Chart category colors to an array. Here I have fixed 12 colors and 12 data items to be added to the Pie Chart. If you want you can add more from here. Here I have 2 sets of color combination, one with a Green base and one with a Blue base. The user can add others depending on requirements.

To dynamically change the Bar Chart Theme I have created a method and in this method I will check for the checked radio button and change the color theme for the Chart.
  1. var pirChartColor = ["#6CBB3C""#F87217""#EAC117""#EDDA74""#CD7F32""#CCFB5D""#FDD017""#9DC209""#E67451""#728C00""#617C58""#64E986"]; // green Color Combinations  
  2. // var pirChartColor = ["#3090C7", "#BDEDFF", "#78C7C7", "#736AFF", "#7FFFD4", "#3EA99F", "#EBF4FA", "#F9B7FF", "#8BB381", "#BDEDFF", "#B048B5", "#4E387E"]; // Blue Color Combinations  
  3. function ChangeChartColor()   
  4. {  
  5.   
  6.    if ($('#rdoColorGreen:checked').val() == "rdoColorGreen") {  
  7.       pirChartColor = ["#6CBB3C""#F87217""#EAC117""#EDDA74""#CD7F32"
          "#CCFB5D"
    "#FDD017""#9DC209""#E67451""#728C00""#617C58""#64E986"]; 
          // green Color Combinations
      
  8.    }  
  9.    else   
  10.    {  
  11.       pirChartColor = ["#3090C7""#BDEDFF""#78C7C7""#736AFF""#7FFFD4""#3EA99F",
     
         "#EBF4FA""#F9B7FF""#8BB381""#BDEDFF""#B048B5""#4E387E"]; 
          // Blue Color Combinations
      
  12.    }  
  13. }  
Function to Draw Bar Chart

In the chart Image Button Click I will call this JavaScript method. In this method I get a Bar Chart value and text from the Dropdown List and draw a Bar Chart with those values. Inside this method I will check for all the features and add all the features to my Bar Chart. The user can customize and redesign that depending on requirements.

Inside this method before each line I have added a comment that will explain each part in detail.
  1. function plotData() {  
  2.    ChangeChartColor();  
  3.    //During the databind i have store the Minumum and Maximum value of the Drop Downlist. 
  4.    I will use this Maximum and Minumum value to draw the plots.  
  5.    var minDataVal = $('#hidListMin').val();  
  6.    var maxDataVal = $('#hidListMax').val();  
  7.   
  8.    var NoofPlots = $("#DropDownList1 option").length;  
  9.   
  10.   
  11.    var canvas;  
  12.    var ctx;  
  13.    var lastend = 0;  
  14.    //here get the Piechart Value Total result.This will be used to draw the pie charts  
  15.    var chartTotalResult = getChartTotal();  
  16.   
  17.    //Declaring all the local variables which need to be draw Pie Chart  
  18.    var canWidth = 200;  
  19.    var Canheight = 150;  
  20.    var labelBarX = 100;  
  21.    var labelBarY = 100;  
  22.    var labelBarWidth = 100;  
  23.    var labelBarHeight = 100;  
  24.    var colorval = 0;  
  25.    // Decare Images to be displayed as the Alert Message  
  26.    var greenImage = new Image();  
  27.    var redImage = new Image();  
  28.    greenImage.src = 'images/Green.png';  
  29.    redImage.src = 'images/Red.png';  
  30.    var imagesize = 20;  
  31.   
  32.   
  33.    var alertCheckValue = 300;  
  34.    //Declare Rectangle Array to draw pie Chart  
  35.    rect = {};  
  36.    rectInner = {};  
  37.   
  38.    //storing the Canvas Context to local variable ctx.This variable will be used to draw the Pie Chart  
  39.    canvas = document.getElementById("canvas");  
  40.    ctx = canvas.getContext("2d");  
  41.    //globalAlpha - > is used to display the 100% opoacity of chart.             
       because at the bottom of the code I have used the opacity to 0.1 to
       display the water mark text with fade effect.  
  42.    ctx.globalAlpha = 1;  
  43.    //Every time we clear the canvas and draw the chart   
  44.    ctx.clearRect(0, 0, canvas.width, canvas.height);  
  45.   
  46.   
  47.    //Setting Canvas width ,height and Rectangle size for drawing Piw chart and Label as rectangle.  
  48.    canWidth = (canvas.width/2)-150;  
  49.    Canheight = (canvas.height/2)-20;  
  50.   
  51.    //rect.startX = 4;  
  52.    //rect.startY = 46;  
  53.    //rect.w = canWidth / 3 +40;   
  54.    //rect.h = canvas.height - 60;  
  55.   
  56.    rect.startX = canvas.width-((canvas.width/5)-40);  
  57.    rect.startY = 30;  
  58.    rect.w = canWidth / 3 + 40;  
  59.    rect.h = canvas.height - 60;  
  60.   
  61.   
  62.    //Here we add the font size and color to dispplay the Chart Title.          
       User can change to your requirement .I have display the chart title at the bottom of the chart. 
  63.    var titelXVal=canWidth - 120;  
  64.    var titelYVal = 40;  
  65.     
  66.    ctx.font = '32pt Calibri';  
  67.    ctx.fillStyle = "#15317E";  
  68.    ctx.fillText($('#txtTitle').val(), titelXVal, titelYVal);  
  69.   
  70.    // Here we add the Logo Image and draw the Log Image at PIE Chart.  
  71.    var LogoImage = new Image();  
  72.    LogoImage.src = 'images/shanu.jpg';  
  73.    var LogoImgSize = 40;  
  74.    var logoXVal = 0;  
  75.    var logolYVal = canvas.height-42;  
  76.   
  77.    //here we draw the Logo for teh chart and i have used the alpha to fade and display the Logo.  
  78.    ctx.globalAlpha = 0.6;  
  79.   
  80.    ctx.drawImage(LogoImage, logoXVal, logolYVal, LogoImgSize, LogoImgSize);  
  81.   
  82.    ctx.globalAlpha =1;  
  83.    // For Filling the Rectangle for outer brown Color   
  84.    ctx.fillStyle = "#7F462C";  
  85.    ctx.fillRect(rect.startX, rect.startY, rect.w, rect.h);  
  86.    //Drawing Inner White color Rectange with in Above brown rectangle to plot all the Lables with color,Text and Value.  
  87.    ctx.fillStyle = "#FFFFFF";  
  88.    rectrectInner.startX = rect.startX + 1;  
  89.    rectrectInner.startY = rect.startY + 1;  
  90.    rectrectInner.w = rect.w - 2;  
  91.    rectrectInner.h = rect.h - 2;  
  92.   
  93.   
  94.    //-- draw bar X-Axis and Y-Axis Line  
  95.    var yLineStartPosition = 100;  
  96.    var yLineEndPosition = 40;  
  97.    var yLineHeight = canvas.height - 50;  
  98.    var xLineWidth = rect.startX - 40;  
  99.   
  100.    ctx.moveTo(yLineStartPosition, yLineHeight);  
  101.    ctx.lineTo(xLineWidth, yLineHeight);  
  102.    ctx.stroke();  
  103.   
  104.    ctx.moveTo(yLineStartPosition, yLineHeight);  
  105.    ctx.lineTo(yLineStartPosition, yLineEndPosition);  
  106.    ctx.stroke();  
  107.     
  108.   
  109.    // To Darw the Xval Frequency vertical Line  
  110.    var resultMaxMin = maxDataVal - minDataVal;  
  111.   
  112.    //Callculation for ploting the xval data  
  113.    var MeasurementXAxisValue = parseInt(resultMaxMin / NoofPlots);  
  114.    var widthcalculation = parseInt(((parseInt(xLineWidth)-100) / NoofPlots));  
  115.   
  116.    var XvalPosition = yLineStartPosition + widthcalculation;  
  117.    var historgramHeigt = yLineHeight;  
  118.    //alert(resultMaxMin);  
  119.    //alert(MeasurementXAxisValue);  
  120.   
  121.    //alert(widthcalculation);  
  122.   
  123.    //alert(XvalPosition);  
  124.    var maxFreqValue = parseInt(MeasurementXAxisValue + resultMaxMin / NoofPlots + (resultMaxMin / NoofPlots) * 0.2);  
  125.    var minFreqValue = 0;  
  126.    // alert(maxFreqValue);  
  127.    //--  
  128.   
  129.    // Calculating For plotting the Yval Data  
  130.    var yValMeasurementYAxisValue = parseInt(maxDataVal / NoofPlots);  
  131.    var yValheightcalculation = parseInt(historgramHeigt / NoofPlots);  
  132.    var yValXvalPosition = parseInt(yValheightcalculation);  
  133.    var yvalPlotStartPoint = parseInt(yLineStartPosition);  
  134.    var plotYvals = parseInt(maxDataVal);// + (parseInt(maxDataVal) * 0.2);  
  135.   
  136.    ctx.fillRect(rectInner.startX, rectInner.startY, rectInner.w, rectInner.h);  
  137.    // For inner Legend Drawing  
  138.   
  139.    //Setting the Lable Rectangle positions to draw lables.  
  140.    labelBarX = rect.startX+10;  
  141.    labelBarY = rect.startY+10;  
  142.    labelBarWidth = 140;  
  143.    labelBarHeight = 26;  
  144.    var labelTextXVal = labelBarX+24;  
  145.    var labelTextYXVal = labelBarY + 20;  
  146.   
  147.    var alertImgXVal = labelBarX + 2;  
  148.    var alertImgYVal = labelBarY + 2;  
  149.   
  150.   
  151.    //Here using the Jquery dropdown each we get all the Dropdown items values one by one.       
       Inside the loop we draw the Piw chart and plot all the Lable values.

  152.    $('#DropDownList1 option').each(function () {  
  153.   
  154.   
  155.    // For Ploting the Xais Value  
  156.    // MeasurementXAxisValue = parseInt(MeasurementXAxisValue + resultMaxMin / NoofPlots + (resultMaxMin / NoofPlots) * 0.2);  
  157.   
  158.    //alert(XvalPosition)  
  159.   
  160.    ctx.moveTo(XvalPosition, historgramHeigt);  
  161.    ctx.lineTo(XvalPosition, historgramHeigt + 15);  
  162.    ctx.stroke();  
  163.    ctx.fillStyle = "#000000";  
  164.    ctx.font = '10pt Calibri';  
  165.   
  166.    ctx.fillText('Bar' + parseInt(colorval + 1), XvalPosition - 28, historgramHeigt + 24);  
  167.   
  168.   
  169.    // ***** Her we draw the bar Chart   
  170.    // alert($(this).val())  
  171.    var barRatio = parseInt($(this).val()) / maxDataVal;  
  172.    //alert(ratio)  
  173.    var barfillHeight = parseInt(barRatio * (parseInt(yLineHeight - yLineStartPosition)));  
  174.    // alert(barHeight)  
  175.   
  176.   
  177.    ctx.fillRect(XvalPosition - widthcalculation - 1, yLineHeight - 1, widthcalculation + 2, -barfillHeight);  
  178.   
  179.   
  180.    ctx.fillStyle = pirChartColor[colorval];  
  181.    // e.DrawRectangle(B1pen, XvalPosition_Start, Ystartval, XvalPosition_new, YEndval);  
  182.    ctx.fillRect(XvalPosition - widthcalculation, yLineHeight, widthcalculation, -barfillHeight);  
  183.   
  184.    //ctx.fillRect(XvalPosition - widthcalculation, yLineHeight, widthcalculation, yLineHeight- parseInt($(this).val()));  
  185.    // *****  
  186.   
  187.    ctx.fillStyle = "#000000";  
  188.    ctx.font = '12pt Calibri';  
  189.    ctx.fillText($(this).val(), XvalPosition - widthcalculation + 20 ,yLineHeight- barfillHeight-8);  
  190.    ctx.fillStyle = pirChartColor[colorval];  
  191.   
  192.    //  
  193.    //To increment and plot the next XVal position this will be used in drawing bar graph aswell  
  194.    XvalPositionXvalPosition = XvalPosition + widthcalculation;  
  195.   
  196.    //to incrment the yVal Positions  
  197.    yValXvalPositionyValXvalPosition = yValXvalPosition + yValheightcalculation;  
  198.     
  199.   
  200.    // //End of all Increments  
  201.   
  202.    // here we draw the Lable and text.  
  203.    ctx.fillRect(labelBarX, labelBarY, labelBarWidth, labelBarHeight);  
  204.    // Here we check for the rdoAlert Status is On - If the Alert is on then we display
        the Alert Image as per the Alert check value.  
  205.    if ($('#rdoAlaramOn:checked').val() == "rdoAlaramOn") {  
  206.       // Here we can see fo ever chart value we check with the condition .we have initially declare the alertCheckValue as 300.  
  207.       //so if the Chart Plot value is Greater then or equal to the check value then we
          display the Green Image else we display the Red Image.  
  208.       //user can change this to your requiremnt if needed.This is optioan function for the Pie Chart.  
  209.       if (parseInt($(this).val()) >= alertCheckValue) {  
  210.          ctx.drawImage(greenImage, alertImgXVal, alertImgYVal, imagesize, imagesize);  
  211.       }  
  212.       else {  
  213.          ctx.drawImage(redImage, alertImgXVal, alertImgYVal, imagesize, imagesize);  
  214.       }  
  215.    }  
  216.    //Draw the Pie Chart Label text and Value  
  217.    ctx.fillStyle = "#000000";  
  218.    ctx.font = '10pt Calibri';  
  219.    ctx.fillText($(this).text(), labelTextXVal, labelTextYXVal);  
  220.   
  221.    // To Increment and draw the next bar ,label Text and Alart Image.  
  222.   
  223.    labelBarYlabelBarY = labelBarY + labelBarHeight + 10;  
  224.    labelTextYXVal = labelBarY + labelBarHeight - 8;  
  225.    alertImgYVal = labelBarY + labelBarHeight - 24;  
  226.    colorvalcolorval = colorval + 1;  
  227.   
  228.    });  
  229.   
  230.    //Add the Water Mark text to the Pie Chart.In the Text Box you can add youre
        won name or your company name.here i have used the Text fade using the globalAlpha value set as 0.1.  
  231.    ctx.globalAlpha = 0.1;  
  232.    ctx.font = '72pt Calibri';  
  233.    ctx.fillStyle = "#000000";  
  234.    ctx.fillText($('#txtWatermark').val(), canWidth - 120, Canheight);  
  235. }  
Step 4

Bind Dropdown List Data from DataTable

In the page Load and in the Button Click I will call the “BindDropDownList()” method to populate the Pie Chart values in the DataTable and bind the final result to the Dropdown List.

Here for a simple example I have used the DataTable to populate the data and bind the results to the dropdown list.

You can write your own code to bind the results to the Dropdown list. You can even change the source from Dropdown List to any control depending on your requirements.

This Dropdown list items will be obtained in JavaScript and using the values, the Pie chart will be created dynamically.
  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3.    BindDropDownList();  
  4. }  
  5.   
  6. protected void Button1_Click(object sender, EventArgs e)  
  7. {  
  8.    BindDropDownList();  
  9. }  
  10.   
  11. private void BindDropDownList()  
  12. {  
  13.    DataTable dt = new DataTable();  
  14.    dt.Clear();  
  15.    dt.Rows.Clear();  
  16.    dt.Columns.Add("Names");  
  17.    dt.Columns.Add("Frequency");  
  18.    dt.Columns["Frequency"].DataType = Type.GetType("System.Int32");  
  19.    Random random = new Random();   
  20.    for (int i = 1; i <=Convert.ToInt32(txtChartCount.Text.Trim()); i++)  
  21.    {  
  22.       DataRow row = dt.NewRow();  
  23.       Int32 value = random.Next(100, 600);  
  24.       row["Names"] = "Pie-" + i.ToString() + " - (" + value+") ";  
  25.       row["Frequency"] = value;  
  26.       dt.Rows.Add(row);  
  27.    }  
  28.    DropDownList1.DataSource = dt;  
  29.    DropDownList1.DataTextField = "Names";  
  30.    DropDownList1.DataValueField = "Frequency";  
  31.    DropDownList1.DataBind();  
  32. }  
Complete ASPX Design Code
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2.    <html xmlns="http://www.w3.org/1999/xhtml">  
  3.       <head id="Head1" runat="server">  
  4.          <title>SHANU - >PIE Chart USIN HTML 5 CANVAS</title>  
  5.       <meta http-equiv="Page-Enter" content="blendTrans(Duration=0.0)" />  
  6.       <meta http-equiv="Page-Exit" content="blendTrans(Duration=0.0)" />  
  7.       <meta http-equiv="x-ua-compatible" content="IE=9" />  
  8.       <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>  
  9.       <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  
  10.   
  11.       <SCRIPT>  
  12.          //public Canvas object to use in all the functions.  
  13.   
  14.         //Adding the Pic Chart Colors to array .Here i have fixed to 12 colors and 12 datas to add as Pic Chart.        
            if you want you can add more from here.                
            var pirChartColor = ["#6CBB3C", "#F87217", "#EAC117", "#EDDA74", "#CD7F32", "#CCFB5D", "#FDD017", "#9DC209",
              "#E67451", "#728C00", "#617C58", "#64E986"]; // green Color Combinations  
  15.             // var pirChartColor = ["#3090C7", "#BDEDFF", "#78C7C7", "#736AFF", "#7FFFD4", "#3EA99F", "#EBF4FA",
                "#F9B7FF", "#8BB381", "#BDEDFF", "#B048B5", "#4E387E"]; // Blue Color Combinations  
  16.   
  17.          function getChartTotal(){  
  18.             var chartTotalResult = 0;  
  19.             $('#DropDownList1 option').each(function () {  
  20.   
  21.                chartTotalResult += (typeof parseInt($(this).val()) == 'number') ? parseInt($(this).val()) : 0;  
  22.             });  
  23.   
  24.             return chartTotalResult;  
  25.          }  
  26.          function ChangeChartColor() {  
  27.   
  28.             if ($('#rdoColorGreen:checked').val() == "rdoColorGreen") {       
                   pirChartColor = ["#6CBB3C", "#F87217", "#EAC117", "#EDDA74", "#CD7F32", "#CCFB5D",

                   "#FDD017", "#9DC209", "#E67451", "#728C00", "#617C58", "#64E986"]; // green Color Combinations  
  29.             }  
  30.             else {  
  31.                pirChartColor = ["#3090C7", "#BDEDFF", "#78C7C7", "#736AFF", "#7FFFD4", "#3EA99F",
                   "#EBF4FA", "#F9B7FF", "#8BB381", "#BDEDFF", "#B048B5", "#4E387E"]; // Blue Color Combinations  
  32.             }  
  33.          }  
  34.          ChangeChartColor();  
  35.          function plotData() {  
  36.       ChangeChartColor();  
  37.       //During the databind i have store the Minumum and Maximum value of the Drop Downlist.
          I will use this Maximum and Minumum value to draw the plots.  
  38.       var minDataVal = $('#hidListMin').val();  
  39.       var maxDataVal = $('#hidListMax').val();  
  40.   
  41.       var NoofPlots = $("#DropDownList1 option").length;  
  42.   
  43.       var canvas;  
  44.       var ctx;  
  45.       var lastend = 0;  
  46.       //here get the Piechart Value Total result.This will be used to draw the pie charts  
  47.       var chartTotalResult = getChartTotal();  
  48.   
  49.       //Declaring all the local variables which need to be draw Pie Chart  
  50.       var canWidth = 200;  
  51.       var Canheight = 150;  
  52.       var labelBarX = 100;  
  53.       var labelBarY = 100;  
  54.       var labelBarWidth = 100;  
  55.       var labelBarHeight = 100;  
  56.       var colorval = 0;  
  57.       // Decare Images to be displayed as the Alert Message  
  58.       var greenImage = new Image();  
  59.       var redImage = new Image();  
  60.       greenImage.src = 'images/Green.png';  
  61.       redImage.src = 'images/Red.png';  
  62.       var imagesize = 20;  
  63.   
  64.   
  65.       var alertCheckValue = 300;  
  66.       //Declare Rectangle Array to draw pie Chart  
  67.       rect = {};  
  68.       rectInner = {};  
  69.   
  70.       //storing the Canvas Context to local variable ctx.This variable will be used to draw the Pie Chart  
  71.       canvas = document.getElementById("canvas");  
  72.       ctx = canvas.getContext("2d");  
  73.       //globalAlpha - > is used to display the 100% opoacity of chart.         
           because at the bottom of the code I have used the opacity to 0.1 to display the water mark text with fade effect.
  74.       ctx.globalAlpha = 1;  
  75.       //Every time we clear the canvas and draw the chart   
  76.       ctx.clearRect(0, 0, canvas.width, canvas.height);  
  77.   
  78.   
  79.       //Setting Canvas width ,height and Rectangle size for drawing Piw chart and Label as rectangle.  
  80.       canWidth = (canvas.width/2)-150;  
  81.       Canheight = (canvas.height/2)-20;  
  82.   
  83.       //rect.startX = 4;  
  84.       //rect.startY = 46;  
  85.       //rect.w = canWidth / 3 +40;   
  86.       //rect.h = canvas.height - 60;  
  87.   
  88.       rect.startX = canvas.width-((canvas.width/5)-40);  
  89.       rect.startY = 30;  
  90.       rect.w = canWidth / 3 + 40;  
  91.       rect.h = canvas.height - 60;  
  92.   
  93.       //Here we add the font size and color to dispplay the Chart Title.       
          User can change to your requirement .I have display the chart title at the bottom of the chart.
  94.       var titelXVal=canWidth - 120;  
  95.       var titelYVal = 40;  
  96.   
  97.       ctx.font = '32pt Calibri';  
  98.       ctx.fillStyle = "#15317E";  
  99.       ctx.fillText($('#txtTitle').val(), titelXVal, titelYVal);  
  100.   
  101.       // Here we add the Logo Image and draw the Log Image at PIE Chart.  
  102.       var LogoImage = new Image();  
  103.       LogoImage.src = 'images/shanu.jpg';  
  104.       var LogoImgSize = 40;  
  105.       var logoXVal = 0;  
  106.       var logolYVal = canvas.height-42;  
  107.   
  108.       //here we draw the Logo for teh chart and i have used the alpha to fade and display the Logo.  
  109.       ctx.globalAlpha = 0.6;  
  110.   
  111.       ctx.drawImage(LogoImage, logoXVal, logolYVal, LogoImgSize, LogoImgSize);  
  112.   
  113.       ctx.globalAlpha =1;  
  114.       // For Filling the Rectangle for outer brown Color   
  115.       ctx.fillStyle = "#7F462C";  
  116.       ctx.fillRect(rect.startX, rect.startY, rect.w, rect.h);  
  117.       //Drawing Inner White color Rectange with in Above brown rectangle to plot all the Lables with color,Text and Value.  
  118.       ctx.fillStyle = "#FFFFFF";  
  119.       rectrectInner.startX = rect.startX + 1;  
  120.       rectrectInner.startY = rect.startY + 1;  
  121.       rectrectInner.w = rect.w - 2;  
  122.       rectrectInner.h = rect.h - 2;  
  123.   
  124.       //-- draw bar X-Axis and Y-Axis Line  
  125.       var yLineStartPosition = 100;  
  126.       var yLineEndPosition = 40;  
  127.       var yLineHeight = canvas.height - 50;  
  128.       var xLineWidth = rect.startX - 40;  
  129.   
  130.       ctx.moveTo(yLineStartPosition, yLineHeight);  
  131.       ctx.lineTo(xLineWidth, yLineHeight);  
  132.       ctx.stroke();  
  133.   
  134.       ctx.moveTo(yLineStartPosition, yLineHeight);  
  135.       ctx.lineTo(yLineStartPosition, yLineEndPosition);  
  136.       ctx.stroke();  
  137.       // To Darw the Xval Frequency vertical Line  
  138.       var resultMaxMin = maxDataVal - minDataVal;  
  139.   
  140.       //Callculation for ploting the xval data  
  141.       var MeasurementXAxisValue = parseInt(resultMaxMin / NoofPlots);  
  142.       var widthcalculation = parseInt(((parseInt(xLineWidth)-100) / NoofPlots));  
  143.   
  144.       var XvalPosition = yLineStartPosition + widthcalculation;  
  145.       var historgramHeigt = yLineHeight;  
  146.       var maxFreqValue = parseInt(MeasurementXAxisValue + resultMaxMin / NoofPlots + (resultMaxMin / NoofPlots) * 0.2);  
  147.       var minFreqValue = 0;  
  148.       //--  
  149.   
  150.       // Calculating For plotting the Yval Data  
  151.       var yValMeasurementYAxisValue = parseInt(maxDataVal / NoofPlots);  
  152.       var yValheightcalculation = parseInt(historgramHeigt / NoofPlots);  
  153.       var yValXvalPosition = parseInt(yValheightcalculation);  
  154.       var yvalPlotStartPoint = parseInt(yLineStartPosition);  
  155.       var plotYvals = parseInt(maxDataVal);// + (parseInt(maxDataVal) * 0.2);  
  156.   
  157.       ctx.fillRect(rectInner.startX, rectInner.startY, rectInner.w, rectInner.h);  
  158.       // For inner Legend Drawing  
  159.   
  160.       //Setting the Lable Rectangle positions to draw lables.  
  161.       labelBarX = rect.startX+10;  
  162.       labelBarY = rect.startY+10;  
  163.       labelBarWidth = 140;  
  164.       labelBarHeight = 26;  
  165.       var labelTextXVal = labelBarX+24;  
  166.       var labelTextYXVal = labelBarY + 20;  
  167.   
  168.       var alertImgXVal = labelBarX + 2;  
  169.       var alertImgYVal = labelBarY + 2;  
  170.   
  171.       //Here using the Jquery dropdown each we get all the Dropdown items values one by one.   
          Inside the loop we draw the Piw chart and plot all the Lable values.
  172.       $('#DropDownList1 option').each(function () {  
  173.   
  174.   
  175.       // For Ploting the Xais Value  
  176.       // MeasurementXAxisValue = parseInt(MeasurementXAxisValue + resultMaxMin / NoofPlots + (resultMaxMin / NoofPlots) * 0.2);  
  177.   
  178.       //alert(XvalPosition)  
  179.   
  180.       ctx.moveTo(XvalPosition, historgramHeigt);  
  181.       ctx.lineTo(XvalPosition, historgramHeigt + 15);  
  182.       ctx.stroke();  
  183.       ctx.fillStyle = "#000000";  
  184.       ctx.font = '10pt Calibri';  
  185.   
  186.       ctx.fillText('Bar' + parseInt(colorval + 1), XvalPosition - 28, historgramHeigt + 24);  
  187.   
  188.   
  189.       // ***** Her we draw the bar Chart   
  190.       // alert($(this).val())  
  191.       var barRatio = parseInt($(this).val()) / maxDataVal;  
  192.       //alert(ratio)  
  193.       var barfillHeight = parseInt(barRatio * (parseInt(yLineHeight - yLineStartPosition)));  
  194.       // alert(barHeight)  
  195.       ctx.fillRect(XvalPosition - widthcalculation - 1, yLineHeight - 1, widthcalculation + 2, -barfillHeight);  
  196.       ctx.fillStyle = pirChartColor[colorval];  
  197.       // e.DrawRectangle(B1pen, XvalPosition_Start, Ystartval, XvalPosition_new, YEndval);  
  198.       ctx.fillRect(XvalPosition - widthcalculation, yLineHeight, widthcalculation, -barfillHeight);  
  199.   
  200.       //ctx.fillRect(XvalPosition - widthcalculation, yLineHeight, widthcalculation, yLineHeight- parseInt($(this).val()));  
  201.       // *****  
  202.   
  203.       ctx.fillStyle = "#000000";  
  204.       ctx.font = '12pt Calibri';  
  205.       ctx.fillText($(this).val(), XvalPosition - widthcalculation + 20 ,yLineHeight- barfillHeight-8);  
  206.       ctx.fillStyle = pirChartColor[colorval];  
  207.   
  208.       //  
  209.       //To increment and plot the next XVal position this will be used in drawing bar graph aswell  
  210.       XvalPositionXvalPosition = XvalPosition + widthcalculation;  
  211.   
  212.       //to incrment the yVal Positions  
  213.       yValXvalPositionyValXvalPosition = yValXvalPosition + yValheightcalculation;  
  214.   
  215.       // //End of all Increments  
  216.   
  217.       // here we draw the Lable and text.  
  218.       ctx.fillRect(labelBarX, labelBarY, labelBarWidth, labelBarHeight);  
  219.       // Here we check for the rdoAlert Status is On - If the Alert is on then we display
          the Alert Image as per the Alert check value.  
  220.       if ($('#rdoAlaramOn:checked').val() == "rdoAlaramOn") {  
  221.          // Here we can see fo ever chart value we check with the condition .we have initially
             declare the alertCheckValue as 300.  
  222.       //so if the Chart Plot value is Greater then or equal to the check value then we display
          the Green Image else we display the Red Image.  
  223.       //user can change this to your requiremnt if needed.This is optioan function for the Pie Chart.  
  224.       if (parseInt($(this).val()) >= alertCheckValue) {  
  225.          ctx.drawImage(greenImage, alertImgXVal, alertImgYVal, imagesize, imagesize);  
  226.       }  
  227.       else {  
  228.          ctx.drawImage(redImage, alertImgXVal, alertImgYVal, imagesize, imagesize);  
  229.       }  
  230.    }  
  231.    //Draw the Pie Chart Label text and Value  
  232.    ctx.fillStyle = "#000000";  
  233.    ctx.font = '10pt Calibri';  
  234.    ctx.fillText($(this).text(), labelTextXVal, labelTextYXVal);  
  235.   
  236.    // To Increment and draw the next bar ,label Text and Alart Image.  
  237.   
  238.    labelBarYlabelBarY = labelBarY + labelBarHeight + 10;  
  239.    labelTextYXVal = labelBarY + labelBarHeight - 8;  
  240.    alertImgYVal = labelBarY + labelBarHeight - 24;  
  241.    colorvalcolorval = colorval + 1;  
  242.   
  243.    });  
  244.   
  245.    //Add the Water Mark text to the Pie Chart.In the Text Box you can add youre won name or
       your company name.here i have used the Text fade using the globalAlpha value set as 0.1.  
  246.    ctx.globalAlpha = 0.1;  
  247.    ctx.font = '72pt Calibri';  
  248.    ctx.fillStyle = "#000000";  
  249.    ctx.fillText($('#txtWatermark').val(), canWidth - 120, Canheight);  
  250. }  
  251.   
  252. //Save as Image file  
  253. function ShanuSaveImage() {  
  254.   
  255.    var m = confirm("Are you sure to Save ");  
  256.    if (m) {  
  257.       if (navigator.appName == 'Microsoft Internet Explorer') {  
  258.   
  259.       var image_NEW = document.getElementById("canvas").toDataURL("image/png");  
  260.       image_NEWimage_NEW = image_NEW.replace('data:image/png;base64,', '');  
  261.   
  262.       $.ajax({  
  263.          type: 'POST',  
  264.          contentType: 'application/json; charset=utf-8',  
  265.          url: '/shanuHTML5PIEChart.aspx/SaveImage',  
  266.          data: '{ "imageData" : "' + image_NEW + '" }',  
  267.          async: false,  
  268.          success: function (msg) {  
  269.             alert(msg.d);  
  270.       },  
  271.       error: function () {  
  272.          alert("Pie Chart Not Saved");  
  273.       }  
  274.   
  275.       });  
  276.    }  
  277.    else {  
  278.       // save image without file type  
  279.       var canvas = document.getElementById("canvas");  
  280.       document.location.href = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream");  
  281.   
  282.       var ImageSave = document.createElement('a');  
  283.       ImageSave.download = "shanuPIEImage.png";  
  284.       ImageSave.href = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream");;  
  285.       ImageSave.click();  
  286.       alert("Image Saved");  
  287.    }  
  288.    }  
  289. }  
  290.   
  291. plotData();  
  292. </script>  
  293. </head>  
  294. <body>  
  295.    <form id="form1" runat="server">  
  296.       <img src="images/blank.gif" alt="" width="1" height="10" />  
  297.       <table width="99%" style=" border-bottom:3px solid #3273d5;">  
  298.       <tr>  
  299.   
  300.          <td width=" 250">  
  301.             <table width="99%">  
  302.                <tr>  
  303.                   <td>  
  304.                      Created by SHANU  
  305.   
  306.                   </td>     
  307.                </tr>  
  308.             </table>  
  309.          </td>  
  310.          <td class="style1" align="center">  
  311.             <h3>ASP.NET BAR Chart USING HTML5 and Jquery</h3>  
  312.   
  313.          </td>  
  314.   
  315.       </tr>  
  316.    </table>  
  317.    <img src="~/Images/blank.gif" alt="" width="1" height="10" />  
  318.    <table style=" padding: 5px;width: 99%;table-layout:fixed; border-bottom:3px solid #3273d5;"">  
  319.    <tr>  
  320.       <td >  
  321.          <table width="100%" >  
  322.             <tr>   
  323.   
  324.                <td style="background-color:#ECF3F4;">  
  325.                   Enter BAR Chart Draw Count:  
  326.   
  327.                </td>  
  328.                <td width="90">  
  329.   
  330.                   <asp:TextBox ID="txtChartCount" runat="server" Height="26px" MaxLength="2" Width="90"  
  331.                      onkeypress="if(event.keyCode<48 || event.keyCode>57)event.returnValue=false;" >7</asp:TextBox><br />  
  332.                   <asp:RangeValidator ID="RangeValidator1" Type="Integer" MinimumValue="1" MaximumValue="12"
                         ControlToValidate="txtChartCount" runat="server" ErrorMessage="No <= 12"></asp:RangeValidator>   
  333.                </td>  
  334.                <td style="background-color:#ECF3F4;">  
  335.                   Click Button to fill BAR Chart Data:  
  336.   
  337.                </td>  
  338.                <td>  
  339.                   <asp:DropDownList ID="DropDownList1" runat="server" Width="140px" Height="36px">  
  340.                   </asp:DropDownList>  
  341.                </td>  
  342.             <td>  
  343.             <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Populate List"
                   BackColor="#336699" BorderColor="White" BorderStyle="Solid" BorderWidth="1px" Font-Bold="True" 
                   ForeColor
    ="#CCFFFF" Height="37px" />  
  344.          </td>  
  345.          <td style="background-color:#ECF3F4;" >  
  346.             Click to Draw Dynamic Pic Chart:  
  347.   
  348.          </td>  
  349.          <td rowspan="2">  
  350.              <img src="images/Bar.png" onClick="plotData()" alt="Click to Draw BAR Chart" />  
  351.          </td>  
  352.          <td style="background-color:#ECF3F4;"" rowspan="2">  
  353.             Save Pic Chart:  
  354.   
  355.          </td>  
  356.          <td rowspan="2">  
  357.             <img src="images/Save.png" onClick="ShanuSaveImage()" alt="Click to Save BAR Chart" />  
  358.          </td>  
  359.       </tr>  
  360.       <tr>   
  361.          <td style="background-color:#ECF3F4;">  
  362.             Enter Chart Title:  
  363.          </td>  
  364.    <td>  
  365.   
  366.       <asp:TextBox ID="txtTitle" runat="server" Height="26px" MaxLength="40" Width="120" >SHANU BAR Chart</asp:TextBox><br />  
  367.    </td>  
  368.    <td style="background-color:#ECF3F4;">  
  369.       Chart WaterMark:  
  370.   
  371.    </td>  
  372.    <td>  
  373.   
  374.       <asp:TextBox ID="txtWatermark" runat="server" Height="26px" MaxLength="40" Width="120px" >SHANU</asp:TextBox><br />  
  375.    </td>  
  376.    <td style="background-color:#ECF3F4;">  
  377.       Alert Status </td>  
  378.       <td>  
  379.   
  380.       <asp:RadioButton ID="rdoAlaramOn" runat="server" Checked="True" GroupName="Alaram" Text="Alert On" />  
  381.       <asp:RadioButton ID="rdoAlaramOff" runat="server" GroupName="Alaram" Text="Alert Off" />  
  382.       <b> /</b>   
  383.   
  384.          <asp:RadioButton ID="rdoColorGreen" runat="server" Checked="True" GroupName="Colors" Text="Chart Green Theme" />  
  385.          <asp:RadioButton ID="rdoColorBlue" runat="server" GroupName="Colors" Text="Chart Blue Theme" />  
  386.   
  387.          <br />  
  388.          </td>  
  389.       </tr>  
  390.    </table>  
  391.    </td>  
  392. </tr>  
  393. </table>  
  394.    <img src="~/Images/blank.gif" alt="" width="1" height="10" />  
  395.       <table width="99%" class="search">   
  396.          <table style=" solid 2px #3273d5; padding: 5px;width: 99%;table-layout:fixed; border-top:3px solid #3273d5;"">   
  397.             <tr>  
  398.                <td align="center">  
  399.                   <SECTION style="border-style: solid; border-width: 2px; width: 1024px;height:500px;">  
  400.   
  401.                   <CANVAS HEIGHT="500" WIDTH="1024px" ID="canvas">  
  402.                      Your browser is not supporting HTML5 Canvas .Upgrade Browser to view this program or check with
                          Chrome or in Firefox.  
  403.                   </CANVAS>  
  404.   
  405.                   </SECTION>  
  406.                </td>  
  407.             </tr>  
  408.          </table>  
  409.   
  410.          <asp:HiddenField ID="hidListMax" runat="server" />  
  411.          <asp:HiddenField ID="hidListMin" runat="server" />  
  412.       </form>  
  413.   
  414.    </body>  
  415. </html>  
Points of Interest

Working with HTML5 is really fun. I hope you enjoyed reading my article. I will be happy if someone benefits from my article.

Tested Browsers
  • Chrome
  • Firefox
  • IE10