Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
535
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  // <!-- Chart code -->
  2.   am4core.ready(function() {
  3.  
  4.     // Themes begin
  5.     am4core.useTheme(am4themes_animated);
  6.     // Themes end
  7.  
  8.     var container = am4core.create("e_chart_1", am4core.Container);
  9.     container.width = am4core.percent(100);
  10.     container.height = am4core.percent(100);
  11.     container.layout = "horizontal";
  12.  
  13.  
  14.     var chart = container.createChild(am4charts.PieChart);
  15.  
  16.     // Add data
  17.     chart.data = [{
  18.       "country": "Lithuania",
  19.       "litres": 500,
  20.     }, {
  21.       "country": "Czech Republic",
  22.       "litres": 300,
  23.     }, {
  24.       "country": "Ireland",
  25.       "litres": 200,
  26.     }, {
  27.       "country": "Germany",
  28.       "litres": 150,
  29.     }, {
  30.       "country": "Australia",
  31.       "litres": 140,
  32.     }, {
  33.       "country": "Austria",
  34.       "litres": 120,
  35.     }];
  36.  
  37.     // Add and configure Series
  38.     var pieSeries = chart.series.push(new am4charts.PieSeries());
  39.     pieSeries.dataFields.value = "litres";
  40.     pieSeries.dataFields.category = "country";
  41.     pieSeries.slices.template.states.getKey("active").properties.shiftRadius = 0;
  42.     //pieSeries.labels.template.text = "{category}\n{value.percent.formatNumber('#.#')}%";
  43.  
  44.     pieSeries.slices.template.events.on("hit", function(event) {
  45.       selectSlice(event.target.dataItem);
  46.     })
  47.  
  48.     var chart2 = container.createChild(am4charts.PieChart);
  49.     chart2.width = am4core.percent(30);
  50.     chart2.radius = am4core.percent(80);
  51.  
  52.     // Add and configure Series
  53.     var pieSeries2 = chart2.series.push(new am4charts.PieSeries());
  54.     pieSeries2.dataFields.value = "value";
  55.     pieSeries2.dataFields.category = "name";
  56.     pieSeries2.slices.template.states.getKey("active").properties.shiftRadius = 0;
  57.     //pieSeries2.labels.template.radius = am4core.percent(50);
  58.     //pieSeries2.labels.template.inside = true;
  59.     //pieSeries2.labels.template.fill = am4core.color("#ffffff");
  60.     pieSeries2.labels.template.disabled = true;
  61.     pieSeries2.ticks.template.disabled = true;
  62.     pieSeries2.alignLabels = false;
  63.     pieSeries2.events.on("positionchanged", updateLines);
  64.  
  65.     var interfaceColors = new am4core.InterfaceColorSet();
  66.  
  67.     var line1 = container.createChild(am4core.Line);
  68.     line1.strokeDasharray = "2,2";
  69.     line1.strokeOpacity = 0.5;
  70.     line1.stroke = interfaceColors.getFor("alternativeBackground");
  71.     line1.isMeasured = false;
  72.  
  73.     var line2 = container.createChild(am4core.Line);
  74.     line2.strokeDasharray = "2,2";
  75.     line2.strokeOpacity = 0.5;
  76.     line2.stroke = interfaceColors.getFor("alternativeBackground");
  77.     line2.isMeasured = false;
  78.  
  79.     var selectedSlice;
  80.  
  81.     function selectSlice(dataItem) {
  82.  
  83.       selectedSlice = dataItem.slice;
  84.  
  85.       var fill = selectedSlice.fill;
  86.  
  87.       var count = dataItem.dataContext.subData.length;
  88.       pieSeries2.colors.list = [];
  89.       for (var i = 0; i < count; i++) {
  90.         pieSeries2.colors.list.push(fill.brighten(i * 2 / count));
  91.       }
  92.  
  93.       chart2.data = dataItem.dataContext.subData;
  94.       pieSeries2.appear();
  95.  
  96.       var middleAngle = selectedSlice.middleAngle;
  97.       var firstAngle = pieSeries.slices.getIndex(0).startAngle;
  98.       var animation = pieSeries.animate([{
  99.         property: "startAngle",
  100.         to: firstAngle - middleAngle
  101.       }, {
  102.         property: "endAngle",
  103.         to: firstAngle - middleAngle + 360
  104.       }], 600, am4core.ease.sinOut);
  105.       animation.events.on("animationprogress", updateLines);
  106.  
  107.       selectedSlice.events.on("transformed", updateLines);
  108.  
  109.       //  var animation = chart2.animate({property:"dx", from:-container.pixelWidth / 2, to:0}, 2000, am4core.ease.elasticOut)
  110.       //  animation.events.on("animationprogress", updateLines)
  111.     }
  112.  
  113.  
  114.     function updateLines() {
  115.       if (selectedSlice) {
  116.         var p11 = {
  117.           x: selectedSlice.radius * am4core.math.cos(selectedSlice.startAngle),
  118.           y: selectedSlice.radius * am4core.math.sin(selectedSlice.startAngle)
  119.         };
  120.         var p12 = {
  121.           x: selectedSlice.radius * am4core.math.cos(selectedSlice.startAngle + selectedSlice.arc),
  122.           y: selectedSlice.radius * am4core.math.sin(selectedSlice.startAngle + selectedSlice.arc)
  123.         };
  124.  
  125.         p11 = am4core.utils.spritePointToSvg(p11, selectedSlice);
  126.         p12 = am4core.utils.spritePointToSvg(p12, selectedSlice);
  127.  
  128.         var p21 = {
  129.           x: 0,
  130.           y: -pieSeries2.pixelRadius
  131.         };
  132.         var p22 = {
  133.           x: 0,
  134.           y: pieSeries2.pixelRadius
  135.         };
  136.  
  137.         p21 = am4core.utils.spritePointToSvg(p21, pieSeries2);
  138.         p22 = am4core.utils.spritePointToSvg(p22, pieSeries2);
  139.  
  140.         line1.x1 = p11.x;
  141.         line1.x2 = p21.x;
  142.         line1.y1 = p11.y;
  143.         line1.y2 = p21.y;
  144.  
  145.         line2.x1 = p12.x;
  146.         line2.x2 = p22.x;
  147.         line2.y1 = p12.y;
  148.         line2.y2 = p22.y;
  149.       }
  150.     }
  151.  
  152.     chart.events.on("datavalidated", function() {
  153.       setTimeout(function() {
  154.         selectSlice(pieSeries.dataItems.getIndex(0));
  155.       }, 1000);
  156.     });
  157.  
  158.  
  159.   }); // end am4core.ready()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement