Here, we will learn about creating dynamic am-charts in ASP.NET MVC 5. Charts are very useful for seeing how much work is done in any place in a short period of time.
Prerequisites
Create a new project in ASP.NET MVC.
We are going to use the following jQuery libraries provided by amCharts.
  1. <script src="https://www.amcharts.com/lib/4/core.js"></script>
  2. <script src="https://www.amcharts.com/lib/4/charts.js"></script>
  3. <script src="https://www.amcharts.com/lib/4/plugins/forceDirected.js"></script>
  4. <script src="https://www.amcharts.com/lib/4/themes/animated.js"></script>
We are going to use the dummy API for the chart data.
  1. https://api.myjson.com/bins/zg8of
Open the View -> Home -> Index.cshtml and write the code for generating the chart.
  1. @{
  2. ViewBag.Title = "AM Chart Demo";
  3. }
  4. <div id="chartData"></div>
  5. @Scripts.Render("~/bundles/jquery")
  6. <script src="https://www.amcharts.com/lib/4/core.js"></script>
  7. <script src="https://www.amcharts.com/lib/4/charts.js"></script>
  8. <script src="https://www.amcharts.com/lib/4/plugins/forceDirected.js"></script>
  9. <script src="https://www.amcharts.com/lib/4/themes/animated.js"></script>
  10. <script>
  11. $(document).ready(function () {
  12. $.ajax({
  13. url: 'https://api.myjson.com/bins/zg8of',
  14. method: 'GET', success: function (data) {
  15. generateChart(data);
  16. }, error: function (err) {
  17. alert("Unable to display chart. Something went wrong.");
  18. }
  19. });
  20. function generateChart(data, iteration = 0) {
  21. var dates = [];
  22. var newData = [];
  23. var gr = [];
  24. function groupBy(array, f) {
  25. var groups = {};
  26. array.forEach(function (o) {
  27. var group = JSON.stringify(f(o));
  28. groups[group] = groups[group] || [];
  29. groups[group].push(o);
  30. });
  31. return Object.keys(groups).map(function (group) {
  32. return groups[group];
  33. })
  34. }
  35. var result = groupBy(data, function (item) {
  36. return ([item.Name]);
  37. });
  38. $.each(result, function (a, b) {
  39. var d1 = b.map(function (i) {
  40. return i.Month;
  41. });
  42. $.extend(true, dates, d1);
  43. });
  44. $.each(dates, function (a, b) {
  45. var item = {
  46. sales_figure: b
  47. };
  48. $.each(result, function (i, c) {
  49. el = c.filter(function (e) {
  50. return e.Month == b;
  51. });
  52. if (el && el.length > 0) {
  53. item[c[i].Name.toUpperCase()] = el[0].Sales_Figure;
  54. if (gr.filter(function (g) {
  55. return g == c[i].Name.toUpperCase();
  56. }).length <= 0) {
  57. gr.push(c[i].Name.toUpperCase());
  58. }
  59. }
  60. });
  61. if (Object.keys(item).length > 1) newData.push(item);
  62. });
  63. $chartData = $('#chartData');
  64. var am_el = $('<div id="dc-' + iteration + '" class="col-md-12 col-xs-12 card-item">');
  65. am_el.append($('<div class="lgnd col-md-12 col-xs-12 bb2"><div id="l-' + iteration + '" class="col-md-12 col-xs-12"></div></div>'));
  66. am_el.append($('<div id="c-' + iteration + '" class="col-md-12 col-xs-12" style="min-height:250px ; margin-left: -8px;">'));
  67. $chartData.html(am_el);
  68. var chart = am4core.create("c-" + iteration, am4charts.XYChart);
  69. am4core.options.minPolylineStep = Math.ceil(newData.length / 50);
  70. am4core.options.commercialLicense = true;
  71. am4core.animationDuration = 0;
  72. chart.data = newData;
  73. var categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());
  74. categoryAxis.dataFields.category = "sales_figure";
  75. categoryAxis.renderer.minGridDistance = 70;
  76. categoryAxis.fontSize = 12;
  77. var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());
  78. valueAxis.fontSize = 12;
  79. valueAxis.title.text = "Sales Figure";
  80. chart.legend = new am4charts.Legend();
  81. chart.legend.position = "top";
  82. chart.legend.fontSize = 12;
  83. var markerTemplate = chart.legend.markers.template;
  84. markerTemplate.width = 10;
  85. markerTemplate.height = 10;
  86. var legendContainer = am4core.create("l-" + iteration, am4core.Container);
  87. legendContainer.width = am4core.percent(100);
  88. chart.legend.parent = legendContainer;
  89. var legendDiv = document.getElementById("l-" + iteration);
  90. function resizeLegendDiv() {
  91. legendDiv.style.height = chart.legend.measuredHeight + "px";
  92. legendDiv.style.overflow = "hidden";
  93. }
  94. chart.legend.events.on('inited', resizeLegendDiv);
  95. chart.colors.list = [am4core.color("#0D8ECF"), am4core.color("#FF6600"), am4core.color("#FCD202"), am4core.color("#B0DE09"), am4core.color("#2A0CD0"), am4core.color("#CD0D74"), am4core.color("#CC0000"), am4core.color("#00CC00"), am4core.color('#ffd8b1'), am4core.color("#990000"), am4core.color('#4363d8'), am4core.color('#e6194b'), am4core.color('#3cb44b'), am4core.color('#ffe119'), am4core.color('#f58231'), am4core.color('#911eb4'), am4core.color('#46f0f0'), am4core.color('#f032e6'), am4core.color('#bcf60c'), am4core.color('#fabebe'), am4core.color('#008080'), am4core.color('#e6beff'), am4core.color('#9a6324'), am4core.color('#fffac8'), am4core.color('#800000'), am4core.color('#aaffc3'), am4core.color('#808000'), am4core.color('#ffd8b1'), am4core.color('#000075')] $.each(gr, function (l, d) {
  96. var series = chart.series.push(new am4charts.LineSeries());
  97. series.dataFields.valueY = d;
  98. series.name = d;
  99. series.dataFields.categoryX = "sales_figure";
  100. series.tooltipText = "{name}: [bold]{valueY}[/]";
  101. series.strokeWidth = 2;
  102. series.minBulletDistance = 30;
  103. series.tensionX = 0.7;
  104. series.legendSettings.labelText = "[bold]" + "{name}";
  105. var bullet = series.bullets.push(new am4charts.CircleBullet());
  106. bullet.circle.strokeWidth = 2;
  107. bullet.circle.radius = 3;
  108. bullet.circle.fill = am4core.color("#fff");
  109. var bulletbullethover = bullet.states.create("hover");
  110. bullethover.properties.scale = 1.2;
  111. chart.cursor = new am4charts.XYCursor();
  112. chart.cursor.behavior = "panXY";
  113. chart.cursor.snapToSeries = series;
  114. });
  115. chart.scrollbarX = new am4core.Scrollbar();
  116. chartchart.scrollbarX.parent = chart.bottomAxesContainer;
  117. }
  118. });
  119. </script>
Output
You can download the source code from here.
Please give your valuable feedback/comments/questions about this article. Please let me know how you like and understand this article and how I could improve it.