Отображение данных с использованием круговой диаграммы в веб-приложении - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь построить график данных pandas из функции python и отобразить его на веб-сервере с помощью круговой диаграммы Highcharts.Я могу получить данные из функции на веб-сервер в виде данных JSON через колбу.но когда я хочу отобразить его, диаграмма пуста.Через веб-консоль я также удостоверился, что формат данных, попадающих в Highcharts, правильный, но все еще ничего.

Здесь я получаю фрейм данных panda и отправляю его на веб-сервер через флягу:

actype_json = actype.to_json(orient = 'records')

@app.route('/data/airport', methods = ['GET'])
def broadcast_data():
    return eval(json.dumps(actype_json))

@app.route('/')
def plotgraph():
    return render_template('airport.html')

В своем HTML-файле я пытался использовать AJAX для вызова данных и нанесения их на круговую диаграмму Highcharts:

<!DOCTYPE html>
<html>
<head>

    <script src="https://code.highcharts.com/highcharts.js"></script>
    <script src="https://code.highcharts.com/modules/exporting.js"></script>
    <script src="https://code.highcharts.com/modules/export-data.js"></script>

    <script
    src="https://code.jquery.com/jquery-3.3.1.js"
    integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60="
    crossorigin="anonymous">
    </script>

</head>
<body>

    <div id="container" style="min-width: 310px; height: 400px; max-width: 600px; margin: 0 auto"></div>
    <script>

        function GetUpdatedData(){
            $.ajax({
              url: "/data/airport",
            })
              .done(function( data ) {
                  console.log( data );
                  DrawGraph(data);
                }); 
        }   

        function DrawGraph(dataset) {

            // Radialize the colors
            Highcharts.setOptions({
                    colors: Highcharts.map(Highcharts.getOptions().colors, function (color) {
                            return {
                                    radialGradient: {
                                            cx: 0.5,
                                            cy: 0.3,
                                            r: 0.7
                                    },
                                    stops: [
                                            [0, color],
                                            [1, Highcharts.Color(color).brighten(-0.3).get('rgb')] // darken
                                    ]
                            };
                    })
            });

            // Build the chart
            Highcharts.chart('container', {
                    chart: {
                            plotBackgroundColor: null,
                            plotBorderWidth: null,
                            plotShadow: false,
                            type: 'pie'
                    },
                    title: {
                            text: 'Browser market shares in January, 2018'
                    },
                    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) || 'black'
                                            },
                                            connectorColor: 'silver'
                                    }
                            }
                    },
                    series: [{
                        name: 'Aircraft',
                        data: [dataset]
                }]
            });
            setTimeout(GetUpdatedData, 1500);
        }
    </script>

</body>
</html>

Это скриншот круговой диаграммы Highcharts, который я вижу:

enter image description here

На вкладке ответа отображается формат данных, которые пытаются построить на старшей диаграмме.Любой совет будет очень полезным.Спасибо!

1 Ответ

0 голосов
/ 22 февраля 2019

Вы допустили простую ошибку при добавлении данных в массив series.data.Обратите внимание, что ваши данные на самом деле являются правильным массивом данных Highcharts с точечными объектами внутри:

data:

[{
  "AC TYPE": "B773",
  "y": 35
}, {
  "AC TYPE": "B77W",
  "y": 16
}]

Однако вы добавили этот массив в другойвот так:

series: [{
  name: 'Aircraft',
  data: [dataset]
}]

Это дает вам недопустимый формат данных с двумя вложенными массивами:

  series: [{
    name: 'Aircraft',
    data: [[{
      "AC TYPE": "B773",
      "y": 35
    }, {
      "AC TYPE": "B77W",
      "y": 16
    }]]
  }]

Удалите массив переноса, и диаграмма должна быть правильно отображена.

Демо:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...