How to create 'Pie chart' using HighCharts in MVC Application?
There are following step to create Pie Chart.
Step 1.
Create MVC Application.
Step 2.
Add KeyValuePair Class.
example:
public class KeyValuePair
{
    public string Key { get; set; }
    public double Value { get; set; }
}
Step 3.
Add New controller with name 'HightChartsController'.
example:
using System;
using System.Collections.Generic;
using System.Web.Mvc;
namespace DotNetByPriyanshu.Controllers
{
    public class HightChartsController : Controller
    {
       //to do here
    }
}
Step 4.
Add Action method with name 'Charts'.
example:
[HttpGet]  
public ActionResult Charts()
        {
            return View();
        }
Step 5.
Add View for Charts.
example:
@{
    ViewBag.Title = "Charts";
}
<h2>Charts</h2><br />
Step 6.
Add 'Div' for Pie chart.
<div id="containerPieChart" style="height: 500px; width: 500"></div>
Step 7.
Add Highcharts & Jquery links.
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
Step 8.
Add 
example:
[HttpGet]
public ActionResult GetData()
        {
            try
            {
                List<KeyValuePair> objList = new List<KeyValuePair>();
                KeyValuePair obj = new KeyValuePair();
                obj.Key = "Delhi";
                obj.Value = 44.2;
                objList.Add(obj);
                KeyValuePair obj1 = new KeyValuePair();
                obj1.Key = "Bangalore";
                obj1.Value = 26.6;
                objList.Add(obj1);
                KeyValuePair obj2 = new KeyValuePair();
                obj2.Key = "Pune";
                obj2.Value = 20;
                objList.Add(obj2);
                KeyValuePair obj3 = new KeyValuePair();
                obj3.Key = "Patna";
                obj3.Value = 3.1;
                objList.Add(obj3);
                KeyValuePair obj4 = new KeyValuePair();
                obj4.Key = "Other";
                obj4.Value = 5.4;
                objList.Add(obj4);
                return Json(objList, JsonRequestBehavior.AllowGet);
            }
            catch (Exception)
            {
                return Json("", JsonRequestBehavior.AllowGet);
            }
        }
Step 9.
Added Jquery for Pie Char.
example:
 $(document).ready(function () {
        createPieChart();
    });
    function createPieChart() {
        $.ajax({
            type: "GET",
            contentType: "application/json; charset=utf-8",
            url: "/HightCharts/GetData",
            dataType: 'json',
            success: function (response) {
                var aData = response;
                var arr = []
                $.map(aData, function (item, index) {
                    var i = [item.Key, item.Value];
                    var obj = {};
                    obj.name = item.Key;
                    obj.y = item.Value;
                    arr.push(obj);
                });
                var jsonArray = JSON.parse(JSON.stringify(arr));
                drawPieChart(jsonArray);
            },
            error: function (response) {
            }
        });
    }
    function drawPieChart(seriesData) {
        Highcharts.chart('containerPieChart', {
            chart: {
                plotBackgroundColor: null,
                plotBorderWidth: null,
                plotShadow: false,
                type: 'pie'
            },
            title: {
                text: 'Population percentage city wise'
            },
            tooltip: {
                pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
            },
            plotOptions: {
                pie: {
                    allowPointSelect: true,
                    cursor: 'pointer',
                    dataLabels: {
                        enabled: true,
                        format: '<b>{point.name}</b>: {point.percentage:.1f} %',
                        style: {
                            color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'green'
                        }
                    }
                }
            },
            series: [{
                name: "Brands",
                colorByPoint: true,
                data: seriesData
            }]
        });
    }
Step 10.
Add link in  Layout page.
example:
 <li>@Html.ActionLink("High Charts", "Charts", "HightCharts")</li>
Consolidate Code:
C# Code with Controller:
using System;
using System.Collections.Generic;
using System.Web.Mvc;
namespace DotNetByPriyanshu.Controllers
{
    public class HightChartsController : Controller
    {
        [HttpGet]
        public ActionResult Charts()
        {
            return View();
        }
        [HttpGet]
        public ActionResult GetData()
        {
            try
            {
                List<KeyValuePair> objList = new List<KeyValuePair>();
                KeyValuePair obj = new KeyValuePair();
                obj.Key = "Delhi";
                obj.Value = 44.2;
                objList.Add(obj);
                KeyValuePair obj1 = new KeyValuePair();
                obj1.Key = "Bangalore";
                obj1.Value = 26.6;
                objList.Add(obj1);
                KeyValuePair obj2 = new KeyValuePair();
                obj2.Key = "Pune";
                obj2.Value = 20;
                objList.Add(obj2);
                KeyValuePair obj3 = new KeyValuePair();
                obj3.Key = "Patna";
                obj3.Value = 3.1;
                objList.Add(obj3);
                KeyValuePair obj4 = new KeyValuePair();
                obj4.Key = "Other";
                obj4.Value = 5.4;
                objList.Add(obj4);
                return Json(objList, JsonRequestBehavior.AllowGet);
            }
            catch (Exception)
            {
                return Json("", JsonRequestBehavior.AllowGet);
            }
        }
    }
}
public class KeyValuePair
{
    public string Key { get; set; }
    public double Value { get; set; }
}
View:
@{
    ViewBag.Title = "Charts";
}
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<h2>Charts</h2><br />
<div id="containerPieChart" style="height: 500px; width: 500"></div>
JQuery:
    $(document).ready(function () {
        createPieChart();
    });
    function createPieChart() {
        $.ajax({
            type: "GET",
            contentType: "application/json; charset=utf-8",
            url: "/HightCharts/GetData",
            dataType: 'json',
            success: function (response) {
                var aData = response;
                var arr = []
                $.map(aData, function (item, index) {
                    var i = [item.Key, item.Value];
                    var obj = {};
                    obj.name = item.Key;
                    obj.y = item.Value;
                    arr.push(obj);
                });
                var jsonArray = JSON.parse(JSON.stringify(arr));
                drawPieChart(jsonArray);
            },
            error: function (response) {
            }
        });
    }
    function drawPieChart(seriesData) {
        Highcharts.chart('containerPieChart', {
            chart: {
                plotBackgroundColor: null,
                plotBorderWidth: null,
                plotShadow: false,
                type: 'pie'
            },
            title: {
                text: 'Population percentage city wise'
            },
            tooltip: {
                pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
            },
            plotOptions: {
                pie: {
                    allowPointSelect: true,
                    cursor: 'pointer',
                    dataLabels: {
                        enabled: true,
                        format: '<b>{point.name}</b>: {point.percentage:.1f} %',
                        style: {
                            color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'green'
                        }
                    }
                }
            },
            series: [{
                name: "Brands",
                colorByPoint: true,
                data: seriesData
            }]
        });
    }

 
No comments:
Post a Comment