Как нарисовать несколько линий в линейном графике amcharts, используя json? - PullRequest
0 голосов
/ 23 октября 2019

У меня есть линейчатая диаграмма AM Charts с несколькими графиками, которые я загружаю с URL. Это прекрасно работает с загрузчиком данных, тянущим json для данных, однако я пытаюсь получить скрипт для загрузки динамических данных «графика». Я пробовал решение ЗДЕСЬ , но оно не отображается в браузере.

РЕДАКТИРОВАТЬ - я исправил JavaScript (имел дополнительную скобку), теперь он отображается в браузере, точки данных есть, но не видны и не рисуют линии.

У кого-нибудь естькакие-либо предложения?

css

<!-- Styles -->
<style>
html, body {
  width: 100%;
  height: 100%;
  margin: 0px;
}

#chartdiv {
    width: 100%;
    height: 100%;
}
</style>'

javascript

 <!-- Chart code -->
 <script>
 var chart = AmCharts.makeChart("chartdiv", {
  "type": "serial",
  "theme": "light",
  "dataLoader": {
    "url": "http://127.0.0.1:5000/rate_json.json",
    "format": "json",
    "complete": function(chart) {
       //get potential valueFields after filtering out the categoryField
       var valueFields = Object.keys(chart.dataProvider[0]).filter(function(value) {
         return value !== chart.categoryField;
       })
      //create the graphs
       valueFields.forEach(function(valueField) {
         chart.graphs.push({
           "valueField": valueField,
           "type": "serial",
           "balloonText": "[[category]]: <b>[[value]]</b>",
           "fillAlphas": 0.8,
           "lineAlphas": 0.2
         })
       });
     }
   },
  "valueAxes": [{
    "gridColor": "#FFFFFF",
    "gridAlpha": 0.2,
    "dashLength": 0
  }],
  "gridAboveGraphs": true,
  "startDuration": 1,
  "graphs": [],
  "chartCursor": {
    "categoryBalloonEnabled": false,
    "cursorAlpha": 0,
    "zoomable": false
  },
  "categoryField": "month",
  "categoryAxis": {
    "gridPosition": "start",
    "gridAlpha": 0
  },
  "legend": {},
  "export": {
    "enabled": true
    },
  "menu": [ {
    "class": "export-main",
    "menu": [ "PNG", "JPG", "CSV" ]
  } ]
});

</script>

html

<!-- Resources -->
<script src="//www.amcharts.com/lib/3/amcharts.js"></script>
<script src="//www.amcharts.com/lib/3/serial.js"></script>
<script src="//www.amcharts.com/lib/3/themes/light.js"></script>
<script type="text/javascript" src="https://www.amcharts.com/lib/3/plugins/export/export.js"></script>
<link rel="stylesheet" href='https://www.amcharts.com/lib/3/plugins/export/export.css' type='text/css' media='all'/>
<script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/t-160/dataloader-3.19.0.min.js"></script>

<div id="chartdiv"></div>

Если я использую следующий javascript, он работает отлично, ноМне нужно иметь возможность добавлять / удалять магазины динамически

<!-- Chart code -->
<script>
var chart = AmCharts.makeChart("chartdiv", {
  "type": "serial",
  "theme": "light",
  "dataLoader": {
    "url": "http://127.0.0.1:5000/rate_json.json",
    "format": "json"
  },
  "valueAxes": [{
    "gridColor": "#FFFFFF",
    "gridAlpha": 0.2,
    "dashLength": 0
  }],
  "gridAboveGraphs": true,
  "startDuration": 1,
  "graphs": [{
    "title": "Store 1216",
    "balloonText": "[[title]]: <b>[[value]]</b>",
    "bullet": "round",
    "bulletSize": 10,
    "bulletBorderColor": "#ffffff",
    "bulletBorderAlpha": 1,
    "bulletBorderThickness": 2,
     "lineThickness": 3,
    "valueField": "1216"
  }, {
    "title": "Store 6528",
    "balloonText": "[[title]]: <b>[[value]]</b>",
    "bullet": "round",
    "bulletSize": 10,
    "bulletBorderColor": "#ffffff",
    "bulletBorderAlpha": 1,
    "bulletBorderThickness": 2,
     "lineThickness": 3,
    "valueField": "6528"
  },
  {
    "title": "Store 230",
    "balloonText": "[[title]]: <b>[[value]]</b>",
    "bullet": "round",
    "bulletSize": 10,
    "bulletBorderColor": "#ffffff",
    "bulletBorderAlpha": 1,
    "bulletBorderThickness": 2,
     "lineThickness": 3,
    "valueField": "230"
  },{
    "title": "Store 6538",
    "balloonText": "[[title]]: <b>[[value]]</b>",
    "bullet": "round",
    "bulletSize": 10,
    "bulletBorderColor": "#ffffff",
    "bulletBorderAlpha": 1,
    "bulletBorderThickness": 2,
     "lineThickness": 3,
    "valueField": "6538"
  },{
    "title": "Store 6514",
    "balloonText": "[[title]]: <b>[[value]]</b>",
    "bullet": "round",
    "bulletSize": 10,
    "bulletBorderColor": "#ffffff",
    "bulletBorderAlpha": 1,
    "bulletBorderThickness": 2,
     "lineThickness": 3,
    "valueField": "6514"
  },{
    "title": "Store 1297",
    "balloonText": "[[title]]: <b>[[value]]</b>",
    "bullet": "round",
    "bulletSize": 10,
    "bulletBorderColor": "#ffffff",
    "bulletBorderAlpha": 1,
    "bulletBorderThickness": 2,
     "lineThickness": 3,
    "valueField": "1297"
  },
  {
    "title": "Store 6299",
    "balloonText": "[[title]]: <b>[[value]]</b>",
    "bullet": "round",
    "bulletSize": 10,
    "bulletBorderColor": "#ffffff",
    "bulletBorderAlpha": 1,
    "bulletBorderThickness": 2,
     "lineThickness": 3,
    "valueField": "6299"
  },{
    "title": "Store 5830",
    "balloonText": "[[title]]: <b>[[value]]</b>",
    "bullet": "round",
    "bulletSize": 10,
    "bulletBorderColor": "#ffffff",
    "bulletBorderAlpha": 1,
    "bulletBorderThickness": 2,
     "lineThickness": 3,
    "valueField": "5830"
  },{
    "title": "Average",
    "balloonText": "[[title]]: <b>[[value]]</b>",
    "bullet": "round",
    "bulletSize": 10,
    "bulletBorderColor": "#ffffff",
    "bulletBorderAlpha": 1,
    "bulletBorderThickness": 2,
     "lineThickness": 3,
    "valueField": "Average"
  }],
  "chartCursor": {
    "categoryBalloonEnabled": false,
    "cursorAlpha": 0,
    "zoomable": false
  },
  "categoryField": "month",
  "categoryAxis": {
    "gridPosition": "start",
    "gridAlpha": 0
  },
  "legend": {},
  "export": {
    "enabled": true
    },
  "menu": [ {
    "class": "export-main",
    "menu": [ "PNG", "JPG", "CSV" ]
  } ]
});

</script>

Данные

    [{"month": "February", "1216": 22.8, "6528": 23.65, "230": 23.61, "6538": 23.43, "6514": 23.21, "1297": 23.14, "6299": 23.11, "5830": 22.71, "Average": 23.21}, {"month": "March", "1216": 20.01, "6528": 22.61, "230": 23.67, "6538": 22.54, "6514": 22.91, "1297": 23.59, "6299": 13.87, "5830": 22.7, "Average": 21.49}, {"month": "April", "1216": 24.67, "6528": 24.64, "230": 22.7, "6538": 40.89, "6514": 38.18, "1297": 41.98, "6299": 23.19, "5830": 38.8, "Average": 37.51}, {"month": "May", "1216": 22.8, "6528": 23.65, "230": 23.61, "6538": 23.43, "6514": 23.21, "1297": 23.14, "6299": 23.11, "5830": 22.71, "Average": 23.21}, {"month": "June", "1216": 20.01, "6528": 22.61, "230": 23.67, "6538": 22.54, "6514": 22.91, "1297": 23.59, "6299": 13.87, "5830": 22.7, "Average": 21.49}, {"month": "July", "1216": 21.67, "6528": 21.64, "230": 25.7, "6538": 40.89, "6514": 38.18, "1297": 41.98, "6299": 23.19, "5830": 38.8, "Average": 37.51}, {"month": "August", "1216": 22.8, "6528": 23.65, "230": 23.61, "6538": 23.43, "6514": 23.21, "1297": 23.14, "6299": 23.11, "5830": 22.71, "Average": 23.21}, {"month": "Sept", "1216": 20.01, "6528": 22.61, "230": 23.67, "6538": 22.54, "6514": 22.91, "1297": 23.59, "6299": 13.87, "5830": 22.7, "Average": 21.49}, {"month": "Oct", "1216": 14.67, "6528": 16.64, "230": 27.7, "6538": 20.9, "6514": 22.18, "1297": 21.84, "6299": 15.19, "5830": 18.8, "Average": 21.99}]

Пример при работе: enter image description here

1 Ответ

1 голос
/ 30 октября 2019

Проблема заключается в том, как вы создаете графики - в объекте AmGraph нет type: "serial", так как это значение используется для типа диаграммы. В объекте AmGraph type может быть установлено в «line», «column», «step», «smoothedLine», «Подсвечник» и «ohlc». Исправление типа исправит ваш график.

"complete": function(chart) {
   //get potential valueFields after filtering out the categoryField
   var valueFields = Object.keys(chart.dataProvider[0]).filter(function(value) {
     return value !== chart.categoryField;
   })
  //create the graphs
   valueFields.forEach(function(valueField) {
     chart.graphs.push({
       "valueField": valueField,
       "title": valueField, //added to show labels next to legend markers
       "type": "line", //type should be line, not serial
       "balloonText": "[[category]]: <b>[[value]]</b>",
       "lineAlphas": 0.2
     })
   });
 }

Демо

...